对Kotlin继承的理解

it2026-01-15  16

Kotlin继承

在 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 } }
最新回复(0)