最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Kotlin中的面向?qū)ο螅ㄒ唬?/h1>
 更新時(shí)間:2017年06月20日 09:36:31   作者:steveyg  
這篇文章主要介紹了詳解Kotlin中的面向?qū)ο螅ㄒ唬┑南嚓P(guān)資料,需要的朋友可以參考下

Kotlin中的面向?qū)ο?/strong>

面向?qū)ο?/strong>

面向?qū)ο蟮暮x大家應(yīng)該并不陌生,通過將事物抽象成對象,大大簡化了程序的開發(fā)難度。我們常用的Java、Python、C++都屬于面向?qū)ο蟮木幊陶Z言。Kotlin和java很相似,也是一種面向?qū)ο蟮恼Z言。作為Kotlin中最重要的一部分,我們可以通過了解Kotlin的OOP進(jìn)而了解這門語言,本文將從類、屬性、接口、對象等多個(gè)方面介紹Kotlin的面向?qū)ο蟮奶匦浴?/p>


和大部分語言類似,Kotlin使用class作為類的關(guān)鍵字,當(dāng)我們聲明一個(gè)類時(shí),需要通過class加類名的方式實(shí)現(xiàn):

class ClassDemo{ 
 
} 

在聲明一個(gè)類的時(shí)候,至少需要包含class關(guān)鍵字以及后面的類名,同時(shí)也可以根據(jù)需要增加類頭(用來聲明一些參數(shù))和類體(花括號{}中包含的內(nèi)容,可省略)。

構(gòu)造函數(shù)

與java不同的是,雖然都可以包含多個(gè)構(gòu)造函數(shù),但java中的各個(gè)構(gòu)造函數(shù)都是平級的,而Kotlin中卻分為了兩級(主構(gòu)造函數(shù)和二級構(gòu)造函數(shù)),主構(gòu)造函數(shù)是包含在類頭中的,需要在init方法中實(shí)現(xiàn)額外的操作,而二級構(gòu)造函數(shù)可以在函數(shù)體中實(shí)現(xiàn)所有操作

//主構(gòu)造函數(shù),constructor和init都可省略 
class ClassDemo constructor(type:String){ 
 init{ 
 System.out.println(type) 
 } 
} 

在主構(gòu)造函數(shù)中傳入的參數(shù)可以在類體中為屬性賦值,也可以直接在主構(gòu)造函數(shù)中聲明

class ClassDemo(type:String, var prop2: String = type){ 
 var prop1 = type 
} 

二級構(gòu)造函數(shù)必須包含constructor

class ClassDemo{ 
 constructor(type:String){ 
  System.out.println(type) 
 } 
} 

對于有主構(gòu)造函數(shù)的類而言,每個(gè)二級構(gòu)造函數(shù)都要,或直接或間接通過另一個(gè)二級構(gòu)造函數(shù)代理主構(gòu)造函數(shù)。在同一個(gè)類中代理另一個(gè)構(gòu)造函數(shù)使用 this 關(guān)鍵字:

//包含主構(gòu)造函數(shù)的二級構(gòu)造函數(shù) 
class ClassDemo(type:String){ 
 constructor(type:String, param:String):this(type){ 
  System.out.println(type + param) 
 } 
} 

無論有沒有聲明主構(gòu)造函數(shù),Kotlin都會提供一個(gè)構(gòu)造函數(shù)的方法,有時(shí)可能不希望將某個(gè)類的構(gòu)造函數(shù)暴露出來(比如實(shí)現(xiàn)單例模式時(shí)),那么就需要對主構(gòu)造函數(shù)進(jìn)行處理

class ClassDemo private constructor(){ 
 
} 

當(dāng)我們想創(chuàng)建實(shí)例時(shí),可以直接調(diào)用對應(yīng)的構(gòu)造函數(shù)進(jìn)行創(chuàng)建

var demo = ClassDemo("hello world") 
val demo = ClassDemo("hello","world") 

我們注意到,在Kotlin中無論是聲明屬性還是創(chuàng)建實(shí)例,會有兩種方式,var和val,val類似于java中的final,通過它聲明的內(nèi)容是無法變化的,而var和val相反,聲明的內(nèi)容既可以讀取也可以修改。

繼承

在Kotlin中,所有的類會默認(rèn)繼承Any這個(gè)父類,但Any并不完全等同于java中的Object類,因?yàn)樗挥衑quals(),hashCode()和toString()這三個(gè)方法。當(dāng)我們想定義一個(gè)父類時(shí),需要使用open關(guān)鍵字

open class Base{ 
 
} 

然后在子類中使用冒號“:”進(jìn)行繼承

class SubClass : Base(){ 
 
} 

如果父類有構(gòu)造函數(shù),那么必須在子類的主構(gòu)造函數(shù)中進(jìn)行繼承,沒有的話則可以選擇主構(gòu)造函數(shù)或二級構(gòu)造函數(shù)

//父類 
open class Base(type:String){ 
 
} 
 
//子類 
class SubClass(type:String) : Base(type){ 
 
} 

重寫

Kotlin中的重寫和java中也有所不同,因?yàn)镵otlin提倡所有的操作都是明確的,因此需要將希望重寫的方法設(shè)為open

open fun funDemo() {} 

然后通過override標(biāo)記實(shí)現(xiàn)重寫

override fun funDemo() { 
 super.funDemo() 
 } 

override重寫的函數(shù)也是open的,如果希望它不被重寫(前提是這個(gè)類可以被繼承),可以在前面增加final標(biāo)簽

open class SubClass : Base{ 
 constructor(type:String) : super(type){ 
 
 } 
 
 final override fun funDemo() { 
 super.funDemo() 
 } 
} 

當(dāng)一個(gè)類同時(shí)繼承且實(shí)現(xiàn)了多個(gè)接口時(shí),如果重寫的方法在父類和接口中都有定義,那么可以通過super<>的方式進(jìn)行繼承

//接口 
interface InterfaceDemo{ 
 fun funDemo(){} 
} 
 
//繼承Base并且實(shí)現(xiàn)InterfaceDemo 
class SubClass : Base(),InterfaceDemo{ 
 final override fun funDemo() { 
 super<Base>.funDemo() 
 super<InterfaceDemo>.funDemo() 
 } 
} 

密封類

密封類用于代表嚴(yán)格的類結(jié)構(gòu),值只能是有限集合中的某中類型,不可以是任何其它類型。這就相當(dāng)于一個(gè)枚舉類的擴(kuò)展:枚舉值集合的類型是嚴(yán)格限制的,但每個(gè)枚舉常量只有一個(gè)實(shí)例,而密封類的子類可以有包含不同狀態(tài)的多個(gè)實(shí)例。聲明密封類需要在 class 前加一個(gè) sealed 修飾符。密封類可以有子類但必須全部嵌套在密封類聲明內(nèi)部。

//密封類 
sealed class Expr { 
 class Const(val number: Double) : Expr() 
 class Sum(val e1: Expr, val e2: Expr) : Expr() 
 object NotANumber : Expr() 
} 

和Kotlin中的類相關(guān)的用法就介紹到這里,文中的完整代碼見github,在Kotlin中的面向?qū)ο螅ǘ?/a>中將會介紹屬性、接口等面向?qū)ο筮^程中同樣常見的內(nèi)容。

文章代碼下載:http://xiazai.jb51.net/201706/yuanma/helloKotlin-master(jb51.net).rar

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • 如何區(qū)分JAVA中的equals與==

    如何區(qū)分JAVA中的equals與==

    這篇文章主要介紹了如何區(qū)分JAVA中的equals與==,文章簡單易懂,實(shí)例代碼幫助大家更好的參考學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • 深入講解SpringBoot Actuator是什么

    深入講解SpringBoot Actuator是什么

    Spring Boot Actuator提供了生產(chǎn)上經(jīng)常用到的功能(如健康檢查,審計(jì),指標(biāo)收集,HTTP跟蹤等),幫助我們監(jiān)控和管理Spring Boot應(yīng)用程序。這些功能都可以通過JMX或HTTP端點(diǎn)訪問
    2023-01-01
  • 使用JAVA8 filter對List多條件篩選的實(shí)現(xiàn)

    使用JAVA8 filter對List多條件篩選的實(shí)現(xiàn)

    這篇文章主要介紹了使用JAVA8 filter對List多條件篩選的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 輕松掌握J(rèn)ava狀態(tài)模式

    輕松掌握J(rèn)ava狀態(tài)模式

    這篇文章主要幫助大家輕松掌握J(rèn)ava狀態(tài)模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • java Random.nextInt()方法的具體使用

    java Random.nextInt()方法的具體使用

    這篇文章主要介紹了java Random.nextInt()方法的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Spring Boot Jar 包部署腳本的實(shí)例講解

    Spring Boot Jar 包部署腳本的實(shí)例講解

    在本篇文章里小編給大家整理的是一篇關(guān)于Spring Boot Jar 包部署腳本的實(shí)例講解內(nèi)容,對此有興趣的朋友們可以跟著學(xué)習(xí)下。
    2021-12-12
  • httpclient模擬post請求json封裝表單數(shù)據(jù)的實(shí)現(xiàn)方法

    httpclient模擬post請求json封裝表單數(shù)據(jù)的實(shí)現(xiàn)方法

    下面小編就為大家?guī)硪黄猦ttpclient模擬post請求json封裝表單數(shù)據(jù)的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • Java基礎(chǔ)夯實(shí)之線程問題全面解析

    Java基礎(chǔ)夯實(shí)之線程問題全面解析

    操作系統(tǒng)支持多個(gè)應(yīng)用程序并發(fā)執(zhí)行,每個(gè)應(yīng)用程序至少對應(yīng)一個(gè)進(jìn)程?。進(jìn)程是資源分配的最小單位,而線程是CPU調(diào)度的最小單位。本文將帶大家全面解析線程相關(guān)問題,感興趣的可以了解一下
    2022-11-11
  • Java groovy內(nèi)存回收測試步驟解析

    Java groovy內(nèi)存回收測試步驟解析

    這篇文章主要介紹了Java groovy內(nèi)存回收測試步驟解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Java 詳細(xì)講解分治算法如何實(shí)現(xiàn)歸并排序

    Java 詳細(xì)講解分治算法如何實(shí)現(xiàn)歸并排序

    分治算法的基本思想是將一個(gè)規(guī)模為N的問題分解為K個(gè)規(guī)模較小的子問題,這些子問題相互獨(dú)立且與原問題性質(zhì)相同。求出子問題的解,就可得到原問題的解,本篇文章我們就用分治算法來實(shí)現(xiàn)歸并排序
    2022-04-04

最新評論

固阳县| 黄陵县| 宿州市| 大宁县| 沁阳市| 雷州市| 义马市| 嘉黎县| 泸定县| 彭州市| 茌平县| 洪洞县| 琼中| 海口市| 丰镇市| 兴安盟| 拉萨市| 菏泽市| 右玉县| 托克逊县| 无锡市| 紫阳县| 福鼎市| 务川| 吉安市| 韩城市| 林甸县| 大渡口区| 淮滨县| 宕昌县| 南川市| 沧源| 达拉特旗| 桓仁| 双牌县| 故城县| 宁都县| 平武县| 九龙县| 抚宁县| 浦东新区|