复写Derived的v()时,ovverride注解是必须的,不然编译器会报错。如不雅没有open注解,比如Base的nv(),那么在子类中是不克不及覆写该办法的。在一个final类中(没有open注解声明),open成员是禁止的。也就是说final类的每个成员也都是final的。
一个标记为override的成员自身就是open的,子类仍然可以覆写它。如不雅你想禁止覆写,那么应用final
- open class AnotherDerived() : Base() {
- final override fun v() {
- println("AnotherDerived.v")
- }
- }
最后,main()验证多态性:
- fun main(args: Array<String>) {
- var base1: Base = Base()
- var base2: Base = Derived()
- var base3: Base = AnotherDerived()
- base1.v()
- base2.v()
- base3.v()
- }
覆写属性
覆写准则
覆写属性和覆写办法根本类似;如不雅子类要从新声明父类中已经声明过的属性,那么须要应用override,并且类型要兼容。每个声明的属性可以被具有初始化器的属性或具有getter办法的属性覆盖。
- open class Foo {
- open val x: Int
- get() {
- println("Foo")
- return 3
- }
- }
- class Bar1 : Foo() {
- override val x: Int = 2
- }
Any!=Java.lang.Object。尤其,除了equals()、hashCode()和toString()三个办法外,没有任何成员。
可以应用var属性覆盖val属性,反之弗成以。因为val属性根本上声明一个getter办法,并将其调换为var,别的在派生类中声明一个setter办法。
可以在主构造器应用override覆盖属性
- interface Aoo {
- val count: Int
- }
- class Aoo1(override val count: Int) : Aoo
- class Aoo2 : Aoo {
- override var count: Int = 0
- }
在Kotlin中,实现持续由以下规矩控制:如不雅类大年夜其直接超类持续同一成员的多个实现,则它必须覆盖该成员并供给本身的实现(可能应用个一一个持续)。 要表示年曳段?承的实现的超类型,可在尖括号中应用超类型名称超等限制,例如,super。
推荐阅读
决定计划越快越好为什么要实现大年夜数据?为什么要用云技巧?高等分析技巧有什么竽暌古势?事实上,关于公司为什>>>详细阅读
本文标题:Kotlin——继承
地址:http://www.17bianji.com/lsqh/36537.html
1/2 1