作家
登录

Kotlin——继承

作者: 来源: 2017-08-04 05:40:19 阅读 我要评论

  •  
  • class C() : A(), B { 
  •     override fun f() { 
  •         super<A>.f() 
  •         super<B>.f() 
  •         println("C"
  •     } 
  • 复写Derived的v()时,ovverride注解是必须的,不然编译器会报错。如不雅没有open注解,比如Base的nv(),那么在子类中是不克不及覆写该办法的。在一个final类中(没有open注解声明),open成员是禁止的。也就是说final类的每个成员也都是final的。

    一个标记为override的成员自身就是open的,子类仍然可以覆写它。如不雅你想禁止覆写,那么应用final

    1. open class AnotherDerived() : Base() { 
    2.     final override fun v() { 
    3.         println("AnotherDerived.v"
    4.     } 

    最后,main()验证多态性:

    1. fun main(args: Array<String>) { 
    2.  
    3.     var base1: Base = Base() 
    4.     var base2: Base = Derived() 
    5.     var base3: Base = AnotherDerived() 
    6.  
    7.     base1.v() 
    8.     base2.v() 
    9.     base3.v() 
    10.  

    覆写属性

    覆写准则

    覆写属性和覆写办法根本类似;如不雅子类要从新声明父类中已经声明过的属性,那么须要应用override,并且类型要兼容。每个声明的属性可以被具有初始化器的属性或具有getter办法的属性覆盖。

    1. open class Foo { 
    2.     open val x: Int 
    3.         get() { 
    4.             println("Foo"
    5.             return 3 
    6.         } 
    7.  
    8. class Bar1 : Foo() { 
    9.     override val x: Int = 2 

    Any!=Java.lang.Object。尤其,除了equals()、hashCode()和toString()三个办法外,没有任何成员。

    可以应用var属性覆盖val属性,反之弗成以。因为val属性根本上声明一个getter办法,并将其调换为var,别的在派生类中声明一个setter办法。

    可以在主构造器应用override覆盖属性

    1. interface Aoo { 
    2.     val countInt 
    3.  
    4. class Aoo1(override val countInt) : Aoo 
    5.  
    6. class Aoo2 : Aoo { 
    7.     override var countInt = 0 

    在Kotlin中,实现持续由以下规矩控制:如不雅类大年夜其直接超类持续同一成员的多个实现,则它必须覆盖该成员并供给本身的实现(可能应用个一一个持续)。 要表示年曳段?承的实现的超类型,可在尖括号中应用超类型名称超等限制,例如,super。


      推荐阅读

      应用虚拟化IT:需要决策支持做后盾

    决定计划越快越好为什么要实现大年夜数据?为什么要用云技巧?高等分析技巧有什么竽暌古势?事实上,关于公司为什>>>详细阅读


    本文标题:Kotlin——继承

    地址:http://www.17bianji.com/lsqh/36537.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)