在 Kotlin 中所有类都有一个共同的超类Any
,这对于没有超类型声明的类是默认超类:
class Example // 从 Any 隐式继承
Any 有三个方法:equals()、 hashCode() 与 toString()。因此,为所有 Kotlin 类都定义了这些方法。
这点和java相似,所有类都继承自object
,kotlin是所有的类都来自any
在默认情况下kotlin都是(final)的,不能够被继承,如果想允许被继承,需要使用open
关键字标记
open class Base // 该类开放继承
如需声明一个显式的超类型,请在类头中把超类型放到冒号之后:
open class Base(p: Int)
class Derived(p: Int) : Base(p)
子类有主构造函数
如果子类有主构造函数, 则基类必须在主构造函数中立即初始化。
被继承的类有主构造,没有次级构造
在子类的主构造函数初始化基类的主构造函数
open class Base(s: String)
class NetworkConfig : Base("xx")
//or
open class Base(s: String)
class NetworkConfig(ss: String) : Base(ss) {
被继承的类没有主构造,有次级构造
在子类的主构造函数初始化基类的次级构造函数(有多个次级构造,只需要选一个)
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) {
子类没有主构造函数
如果子类没有主构造函数,则必须在每一个二级构造函数中用
super
关键字初始化基类,或者在代理另一个构造函数。初始化基类时,可以调用基类的不同构造方法。
基类也没有主构造函数
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
}
}
基类有主构造函数,
在子类的次级构造函数中super
基类的主构造
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
}
}