对Kotlin继承的理解

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
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值