Kotlin 中使用關鍵字 class 聲明類
class Invoice {
}
類聲明由類名、類頭(指定其類型參數、主 構造函數等) 和由大括號包圍的類體構成。類頭
和類體都是可選的;
若是一個類沒有類體,能夠省略花括號。
class MyClass
構造函數
在 Kotlin 中的一個類能夠有一個主構造函數和一個或多個次構造函數。主 構造函數是類頭的
一部分:它跟在類名(和可選的類型參數) 後。
關鍵字class +類名+構造函數關鍵字constructor+(參數)函數
若是主構造函數沒有任何註解或者可見性修飾符,能夠省略這個 constructor 關鍵字。
class Person(firstName: String) {
}
主構造函數不能包含任何的代碼。
初始化的代碼能夠放 到以 init 關鍵字做爲前綴的初始化塊(initializer blocks) 中:
class Customer(name: String) {
init {
logger.info("Customer initialized with value ${name}")
}
}
事實上,聲明屬性以及從主構造函數初始化屬性,Kotlin 有簡潔的語法:
class Person(val firstName: String, val lastName: String, var age: Int) {
// ……
} 沒看明白,在構造方法聲明的參數,屬於類屬性嗎??????????????
構造方法的參數聲明中 val 能夠省略,若是不寫默認val ;this
證實上面的理解是對的。構造方法的參數就是類的屬性。val聲明就是不可變,var是可變。很奇葩!spa
與普通屬性同樣,主構造函數中聲明的屬性能夠是 可變的(var ) 或只讀的(val ) 。
若是構造函數有註解或可見性修飾符,這個 constructor 關鍵字是必需的,而且 這些修飾符
在它前面:
class Customer public @Inject constructor(name: String) {3d
…… 對象
}
blog
次構造函數
類也能夠聲明前綴有 constructor 的次構造函數:
class Person {
constructor(parent: Person) {
parent.children.add(this)
}
}
若是類有一個主構造函數,每一個次構造函數須要委託給主構造函數, 能夠直接委託或者經過
別的次構造函數間接委託。委託到同一個類的另外一個構造函數 用 this 關鍵字便可:
class Person(val name: String) {
constructor(name: String, parent: Person) : this(name) {
parent.children.add(this)
}
}
若是一個非抽象類沒有聲明任何(主或次) 構造函數,它會有一個生成的 不帶參數的主構造
函數。構造函數的可見性是 public。若是你不但願你的類 有一個公有構造函數,你須要聲明
一個帶有非默承認見性的空的主構造函數:
類和繼承
class DontCreateMe private constructor () {
}
注意:在 JVM 上,若是主構造函數的全部的參數都有默認值,編譯器會生成 一個額外
的無參構造函數,它將使用默認值。這使得 Kotlin 更易於使用像 Jackson 或者 JPA 這樣
的經過無參構造函數建立類的實例的庫。
class Customer(val customerName: String = "")
{:.info}
建立類的實例
要建立一個類的實例,咱們就像普通函數同樣調用構造函數:
val invoice = Invoice()
val customer = Customer("Joe Smith")
注意 Kotlin 並無 new 關鍵字。
建立嵌套類、內部類和匿名內部類的類實例在嵌套類中有述。
繼承
類成員
類能夠包含
構造函數和初始化塊
函數
屬性
嵌套類和內部類
對象聲明
編譯器