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 是否夠格?