類的聲明包含類名,類頭(指定類型參數,主構造函數等等),以及類主體,用大括号包裹。類頭和類體是可選的;如果沒有類體可以省略大括号。
在 Kotlin 中類可以有一個主構造函數以及多個二級構造函數。主構造函數是類頭的一部分:跟在類名後面(可以有可選的參數)。
初始化代碼可以放在以 init 做字首的初始化塊内:
如果構造函數有注解或可見性聲明,則 constructor 關鍵字是不可少的,并且注解應該在前:
字首是 constructor:
如果類有主構造函數,每個二級構造函數都要,或直接或間接通過另一個二級構造函數代理主構造函數。在同一個類中代理另一個構造函數使用 this 關鍵字:
沒有聲明構造函數,則有一個預設的無參構造函數。
所有類的基類:Any,類似Java中的Object
所有非抽象類預設都是不可繼承的(java中的final),如果要被子類繼承,需要使用<code>open</code>關鍵字(與java中的final功能相反),繼承用<code>:</code>操作符。
方法如果要被重寫,則也需要是<code>open</code>的,不想被重寫就加<code>final</code>
方法重寫規則:如果有多個相同的方法(繼承或者實作自其他類,如A、B類),則必須要重寫該方法,使用super範型去選擇性地調用父類的實作。
<code>abstract</code>關鍵字,抽象類和函數預設是<code>open</code>的。
使用伴随對象可以直接使用類名來通路(用法類似Java中的static,但是不一樣):
與java的static不同,運作時它們仍然是真正對象的成員執行個體,比如可以實作接口:
一般定義變量的時候有預設的getter/setter方法;如果使用$通路,則可以避開getter/setter方法。
改變一個通路者的可見性或者注解它,可以不用改變預設的實作:
可以包含抽象方法,以及方法的預設實作。可以有屬性但必須是抽象的。一個類或對象可以實作一個或多個接口。
接口屬性不能指派,需要被子類override:
private: 隻在該類(以及它的成員)中可見
protected: 和 private 一樣但在子類中也可見
internal: 在本子產品的所有可以通路該類的均可以通路該類的所有 internal 成員
public: 任何地方可見
使用<code>data</code>關鍵詞修飾類,則會自動添加<code>equals()/hashCode</code>, <code>toString</code>, <code>[compontN()functions]對應按聲明順序出現的所有屬性</code>, <code>copy()</code>
元件函數允許資料類在多重聲明中使用:
類可以标記為 inner 這樣就可以通路外部類的成員。内部類擁有外部類的一個對象引用:
類似Java的匿名内部類,可以繼承/實作多個:
一個沒有父類的對象,我們可以這樣寫:
類代理:
屬性代理:
<a href="http://huanglizhuo.gitbooks.io/kotlin-in-chinese/content/ClassesAndObjects/DelegationProperties.html">标準代理</a>
參考:
<a href="http://kotlinlang.org/docs/reference/basic-syntax.html">http://kotlinlang.org/docs/reference/basic-syntax.html</a>
<a href="http://huanglizhuo.gitbooks.io/kotlin-in-chinese">http://huanglizhuo.gitbooks.io/kotlin-in-chinese</a>