當前位置:
首頁 > 最新 > Kotlin筆記(五)——繼承

Kotlin筆記(五)——繼承

Kotlin的所有類默認繼承自Any類,也就是說Any類是Kotlin所有類的公共基類。Any與Java的Object類不同,它只提供了equals(),toString()和hasCode()三個方法,如果需要擴展Any類,可以使用擴展方法,後面文章會有說明。

Kotlin的類默認是不可被繼承的,也就是默認不可以作為其他類的基類,如果希望一個類可以被繼承,需要使用open關鍵字,下面看一個例子:

如果基類有首要構造器,比如上面的Base,派生類可以直接採用上面的方式調用基類的構造器對基類進行初始化,下面看一個複雜一些的例子:

Base2有兩個構造器,一個是首要構造器,需要一個Float值作為參數,另一個是次要構造器,需要一個Float和一個Int做參數,次要構造器需要調用主要構造器,我們這裡通過this調用了主要構造器,this代表當前實例化的類對象。

Derived2類有一個首要構造器,需要一個Float和一個Int做參數,但是他調用了基類的次要構造器進行基類的初始化。

總結一下,關於類的構造及其派生類的構造,個人認為主要注意以下幾點:

儘可能為每個類提供首要構造器,如果不提供構造器,則Kotlin會為我們自動生成一個默認的無參首要構造器;

次要構造器一定要調用首要構造器;

派生類定義構造器,記得調用基類的構造器完成基類的初始化

Kotlin提供了抽象類,抽象類就是無法實例化的類,我們的基類可以定義為抽象類,抽象類默認是open的,因為它無法被實例化,只能寄希望於被其他類派生才能被使用,抽象類中可以定義抽象方法,抽象方法不能定義函數體,如果有抽象方法,子類必須重寫實現,看下面的例子:

Kotlin還有interface,interface和抽象類的差別在於,interface中的方法都是抽象方法,但是這些抽象方法可以提供函數體,interface也可以定義屬性,但是這些屬性沒有初始值,以後的文章會詳細介紹屬性。看一個例子

注意一些差別,interface沒有構造器,所以派生interface不需要在其後調用interface的構造器,所以上例中AInterface後沒有(),另外,我們在派生類初始化了兩個屬性,實現了一個抽象方法。

最後看一下Kotlin的單實例類,單實例類就是我們定義了一個類,但是這個類Kotlin只會為我們生成一個對象,定義單實例類使用object關鍵字,單實例類也沒有構造函數,其他方面和一個普通類類似,看一個例子:

調用使用類名.方法或屬性名:

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序猿武道館 的精彩文章:

TAG:程序猿武道館 |

您可能感興趣

Kotlin 繼承
Kotlin項目下的Retrofit2網路請求框架
Canonical宣布Kotlin編程語言Snap包格式上線
Spring Boot與Kotlin 使用MongoDB資料庫
Kotlin 編程
Spring Boot與Kotlin使用Spring-data-jpa簡化數據訪問層
Kotlin Android 環境搭建
Kotlin 介面
Gradle Kotlin DSL的accessors 生成問題
Kotlin 語言獲Linux通行證
Kotlin語言Web庫又添一虎將:Kweb
Kotlin和Swift語言在Redmonk榜上排名大幅提升
Kotlin打造Android路由框架
Kotlin 擴展
Kotlin 泛型
Kotlin 條件控制
Kotlin基本語法
Kotlin 循環控制
Kotlin 類和對象
開發 iOS 應用,Kotlin Native 是否夠格?