Koltin之類的定義

類的定義

接口 interface

類似 Java8 接口中的方法可以有默認(rèn)實(shí)現(xiàn),但是不需要 default 關(guān)鍵字來標(biāo)識(shí),以是否有方法體的存在來區(qū)分

  • override 修飾符,強(qiáng)制要求寫

一個(gè)類實(shí)現(xiàn)多個(gè)接口時(shí),若有相同方法在不同的接口中有默認(rèn)實(shí)現(xiàn),那么在實(shí)現(xiàn)類中要明確重寫這個(gè)方法

//調(diào)用接口的默認(rèn)邏輯,通過<>來指定
super<AInterface>.sum()
super<BInterface>.sum()

Kotlin1.0 是以Java6 為目標(biāo)設(shè)計(jì)的,其并不支持接口中的默認(rèn)方法。因此它會(huì)把每個(gè)帶默認(rèn)方法的接口編譯成一個(gè)普通接口和一個(gè)將方法方法體作為靜態(tài)函數(shù)的類的結(jié)合體。接口中只包含聲明,類中包含了以靜態(tài)方法存在的所有實(shí)現(xiàn)。因此,如果需要在Java類中實(shí)現(xiàn)這樣一個(gè)接口,必須為所有的方法,包括在kotlin中有方法體的方法定義你自己的實(shí)現(xiàn)。

繼承性修飾符 open、final、abstract

因Java中存在脆弱的基類問題,kotlin中類的聲明默認(rèn)是 final的,即不可被繼承的。

  • open : 使得類可以被繼承,方法可以被重寫
  • abstract:抽象類,抽象方法
  • final:禁止類被繼承,禁止方法被重寫

接口中的方法(包括抽象方法,以及默認(rèn)實(shí)現(xiàn)的方法),默認(rèn)都是 open 的。被 override 修飾的方法也默認(rèn)是 open的。當(dāng)然 override 的方法可以顯示的聲明為final 的,禁止被重寫。

可見性修飾符

  • public : 默認(rèn)是public
  • internal:模塊內(nèi)可見
  • protected:子類可見
  • private:私有
  • kotlin中不存在Java中包私有的概念,即protected 不具有包權(quán)限,僅在其子類中可見

通用規(guī)則:類的基礎(chǔ)類型和類型參數(shù)列表中用到的所有類,或者函數(shù)的簽名都有與這個(gè)類或者函數(shù)本身相同的可見性

類的擴(kuò)展函數(shù)不能訪問它的private 與 protected 成員

kotlin 編譯成字節(jié)碼后與Java的對(duì)應(yīng)關(guān)系:public -> public;internal -> public;protected -> protected;private -> private

所以存在這個(gè)現(xiàn)象:當(dāng)一個(gè)類聲明為internal 或者 protected ,在kotlin中不可訪問的地方,當(dāng)轉(zhuǎn)換為Java時(shí),某些kotlin不可用的場(chǎng)景在Java中確實(shí)可見可訪問的。

嵌套類 內(nèi)部類

默認(rèn)是 嵌套類,對(duì)應(yīng)Java的靜態(tài)內(nèi)部類,即不持有外部類的引用。

  • inner : 使得嵌套類變?yōu)閮?nèi)部類,持有外部類的引用
  • this@Outer : 通過這種方式來訪問外部類 Outer 的引用

密封類 sealed

委托類 by

關(guān)鍵字 object

Kotlin 中 object 在多種情況下都出現(xiàn),但是他們都遵循一個(gè)核心的理念:
object定義一個(gè)類并同時(shí)創(chuàng)建一個(gè)實(shí)例

  • 對(duì)象聲明:是定義單例模式的一種方式
  • 伴生對(duì)象:可以持有工廠方法和其他與這個(gè)類相關(guān),但是在調(diào)用時(shí)并不依賴類實(shí)例的方法。它們可以通過類名來訪問
  • 對(duì)象表達(dá)式:用來代替Java的匿名內(nèi)部類
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容