栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Kotlin学习:3.4.类的继承

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Kotlin学习:3.4.类的继承

继承

继承

1.必须 open2.使用 :表示继承3.只继承主构造函数4.主构造和次构造函数都继承 方法重写

1.必须 open2.重写 属性重写

1.不能重写val,可以重写var2.覆盖

2.1.val 和 var 可以被覆盖成 var2.2.var 不能覆盖成 val 调用超类

继承 1.必须 open

Java中的类默认都是开放的,如果想类不开放,需要设置 final;Kotlin中的类默认都是final的,如果想开放需要设置open。

类、方法、属性都需要单独设置open,子类才可以覆写

open class 类名{
     ...
     open var/val 属性名 = 属性值
     ...
     open fun 函数名()
     ...
 }
2.使用 :表示继承

Java中使用 extend 表示继承;Kt中使用 :号

3.只继承主构造函数
open class Fruit(p: Int)
class Apple(a: Int) : Fruit(a) {

}
4.主构造和次构造函数都继承
open class Fruit(p: Int) {
    init {
        println("p ==$p")
    }
    constructor(name: String) : this(233)
    constructor(name: String ,p:Int ) : this(p)
}
class Apple : Fruit {

    constructor(p: Int) : super(p)
    constructor(name: String) : super(name)
    constructor(name: String, p: Int) : super(name, p)

}

父类没有主构造函数,只继承次构造函数也这么写

方法重写 1.必须 open
open class Fruit(p: Int) {

    fun log(){

    }

    open fun print(){ //不写open不能重写

    }
}
2.重写
class Apple : Fruit {

    fun log(){ // 错误

    }

    override fun print() {  //正确
        super.print()
    }

}
属性重写 1.不能重写val,可以重写var

open class Fruit(p: Int) {

    open var tag = "父"
    open val clz = "父"

}

class Apple : Fruit {

    override var tag
        get() = super.tag
        set(value) {
            super.tag = value
        }

    override var clz: String
        get() = super.clz
        set(value) {
//            super.clz = value // 错误val不可以动态修改
//  		 clz = value //错误
            println("value = $value")
        }
}

测试

        val apple = Apple("")
        apple.tag = "tag 属性重写"
        apple.print()

输出

2022-02-08 16:16:33.175 7994-7994/com.example.kotlintestdemo I/System.out: tag ==tag 属性重写
2022-02-08 16:16:33.175 7994-7994/com.example.kotlintestdemo I/System.out: clz ==父
2022-02-08 16:16:33.175 7994-7994/com.example.kotlintestdemo I/System.out: value = 这是子类重写的
2.覆盖 2.1.val 和 var 可以被覆盖成 var

如上重写的栗子,var 覆写成var ,依然支持修改;但是val 重写成var依然不支持修改,只是不报错

open class Fruit(p: Int) {
    open var tag = "父"
    open val clz = "父"
}

class Apple : Fruit {
    override var tag = "子"
    override var clz = "子"
}
2.2.var 不能覆盖成 val
```java
class Apple : Fruit {
    override val tag = "子" // 错误
    override var clz = "子"
}
调用超类

使用 super.

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/733066.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号