Kotlin 初学者继承(extend)
Posted 帅次
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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运算符 可以用对某个对象进行类型转换。
以上是关于Kotlin 初学者继承(extend)的主要内容,如果未能解决你的问题,请参考以下文章