在 Kotlin 中所有類都有一個(gè)共同的超類Any
菠劝,這對(duì)于沒有超類型聲明的類是默認(rèn)超類:
class Example // 從 Any 隱式繼承
Any 有三個(gè)方法:equals()、 hashCode() 與 toString()备绽。因此饭玲,為所有 Kotlin 類都定義了這些方法。
這點(diǎn)和java相似,所有類都繼承自object
,kotlin是所有的類都來自any
在默認(rèn)情況下kotlin都是(final)的,不能夠被繼承,如果想允許被繼承,需要使用open
關(guān)鍵字標(biāo)記
open class Base // 該類開放繼承
如需聲明一個(gè)顯式的超類型平痰,請(qǐng)?jiān)陬愵^中把超類型放到冒號(hào)之后:
open class Base(p: Int)
class Derived(p: Int) : Base(p)
子類有主構(gòu)造函數(shù)
如果子類有主構(gòu)造函數(shù)艺骂, 則基類必須在主構(gòu)造函數(shù)中立即初始化诸老。
被繼承的類有主構(gòu)造,沒有次級(jí)構(gòu)造
在子類的主構(gòu)造函數(shù)初始化基類的主構(gòu)造函數(shù)
open class Base(s: String)
class NetworkConfig : Base("xx")
//or
open class Base(s: String)
class NetworkConfig(ss: String) : Base(ss) {
被繼承的類沒有主構(gòu)造,有次級(jí)構(gòu)造
在子類的主構(gòu)造函數(shù)初始化基類的次級(jí)構(gòu)造函數(shù)(有多個(gè)次級(jí)構(gòu)造,只需要選一個(gè))
open class Base {
var agent1 = 0
constructor(ag: Int, name: String) : this(name) {
Log.e("TAG", "Base")
agent1 = ag
}
}
class NetworkConfig(ss: String) : Base(0,ss) {
子類沒有主構(gòu)造函數(shù)
如果子類沒有主構(gòu)造函數(shù),則必須在每一個(gè)二級(jí)構(gòu)造函數(shù)中用
super
關(guān)鍵字初始化基類钳恕,或者在代理另一個(gè)構(gòu)造函數(shù)别伏。初始化基類時(shí),可以調(diào)用基類的不同構(gòu)造方法忧额。
基類也沒有主構(gòu)造函數(shù)
open class Base{
var agent1 = 0
constructor(ag: Int, name: String) : this(name) {
Log.e("TAG", "Base")
agent1 = ag
}
}
class NetworkConfig: Base {
var old: Double? = null
constructor(old: Double, ag: Int, name: String) : super(ag,"") {
this.old = old
}
}
基類有主構(gòu)造函數(shù),
在子類的次級(jí)構(gòu)造函數(shù)中super
基類的主構(gòu)造
open class Base(s: String) {
var agent1 = 0
}
class NetworkConfig: Base {
var old: Double? = null
constructor(old: Double, ag: Int, name: String) : super(name) {
this.old = old
}
}