• Kotlin 继承


    来源于菜鸟教程。

    Kotlin 中所有类都继承该Any类,它是所有类的超类,对于没有超类型声明的类是默认超类:

        class Example        // 从Any 隐式继承
    

     Any默认提供了三个函数:

        equals()
       
    
    
        hashCode()
    
    
    
    
        toString()
    

     注意:Any不是java.lang.Object

    如果一个类要被继承,可以使用open关键字进行修饰。

        open class Base(p : Int)        //定义基类
    
        class Derived(p : Int): Base(p)

    构造函数

    子类有主构造函数

    如果子类有主构造函数,则基类必须在主构造中立即初始化。

    子类没有主构造函数

    如果子类没有主构造函数,则必须在每一个二级构造函数中使用super关键字初始化基类,或者在代理另一个构造函数。初始化基类时,可以调用基类的不同构造方法。

    实例:

    结果:

    可以看到先执行基类的次级构造函数,再执行继承类次级构造函数。

    重写

    在基类中,使用fun声明函数时,此函数默认为final修饰,不能被子类重写。如果允许子类重写该函数,那么就要手动添加open修饰,子类重写方法使用override关键词:

    如果有多个相同的方法(继承或者实现自其他类,如A,B类),则必须要重写该方法,使用super范型去选择性的调用父类的实现。

    C继承自a()或者b(),C不仅可以从A或B中继承函数,而且C可以继承A(),B()共有的函数。此时该函数在中只有一个实现。为了消除歧义。该函数必须调用A()和B()函数的实现,并提供自己的实现。

    属性重写

    属性重写使用override关键字,属性必须具有兼容类型,每一个声明的属性都可以通过初始化程序或者getter方法被重写:

        open class Foo {
             open val x : Int  get  {    .....}
    }
    
        class Bar1 : Foo(){
             override val x : Int = ....
    
    }

     你可以用一个var属性重写一个val属性,但是反过来不行。因为val属性本身定义了getter方法。重写为var属性会在衍生类中额外声明一个setter方法。

    简单来说:var可以变为val。var不可以变为var。

    你可以在主构造函数中使用override关键字作为属性声明的一部分:

  • 相关阅读:
    poj2229 Sumsets (递推)
    hihocoder1148 February 29(区间闰年计数)
    sort函数比较cmp写法
    字符串忽略大小写
    地形
    启用和禁用warning
    AppStore SDK
    NGUI List优化
    ETC1
    加载
  • 原文地址:https://www.cnblogs.com/djxf/p/10161599.html
Copyright © 2020-2023  润新知