【Kotlin 初学者】继承(extend)

Kotlin 继承(extend)

        Kotlin 允许一个类继承自另一个类

        Kotlin 中所有类都继承自 Any 类

        Any 类是所有类的超类,对于没有超类型声明的类是默认超类

        Kotlin 类默认都是封闭的,要让某个类开放继承,必须使用 open 关键字修饰它。

注意:

在 Kotlin 中 Any 类是所有类的超类

在 Java 中 Object 类是所有类的超类

Any 超类

        Any 默认提供了三个函数:

public open class Any {
    
    public open operator fun equals(other: Any?): Boolean

    public open fun hashCode(): Int

    public open fun toString(): String
}

        从这里发现 无论是类还是函数,都使用了 open 关键字修饰。

        同时发现,这里只是定义了函数,没有实现。为什么呢?因为Kotlin是跨平台语言,可以在Android、macOS、Windows、JavaScript上运行,为了支持跨平台更友好,在不同平台有不同实现,所以在这里并未展示。

继承类

/* 食物基类 */
open class Food{
    fun explain() = "Food explain"
}

class Apple :Food(){
    
}

        不加 open 关键字修饰是不让继承滴,如下图:

函数重写

        在基类中,使用 fun 声明函数时,此函数默认为 final 修饰,不能被子类重写。

        如果允许子类重写该函数,那么必须使用 open 关键字修饰它, 子类重写函数使用 override 关键字。

/* 食物基类 */
open class Food{
    //函数必须用 open 关键字修饰,子类才能覆盖
    open fun explain() = "Food explain"
}
/* 继承Food */
class Apple :Food(){
    //使用 override 关键字覆盖父类函数
    override fun explain() = "Apple explain "
}

        在 Kotlin 中 override 是个关键字而不是注解。

使用

fun main() {
    //多态:父类类型的引用子类类型的对象
    val f: Food = Apple()
    println(f.explain())
}

属性重写

/* 食物基类 */
open class Food {
    open val price = 100
    ...
}

/* 继承Food */
class Apple : Food() {
    override var price = 36
    ...
}

fun main() {
    //多态:父类类型的引用子类类型的对象
    val f: Food = Apple()
    println(f.explain())//Apple explain 36
}

类型检测(is)

Kotlin的 is运算符 可以用来检查某个对象的类型。

    println(f is Food)//true
    println(f is Apple)//true
    println(f is File)//false

智能类型转换(as)

Kotlin的 as运算符 可以用对某个对象进行类型转换。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇

)">
下一篇>>