kotlin inheritance 继承

Any

所有类都继承该类,提供默认的三个函数:

equals()

hashCode()

toString()
继承声明:

在类的构造函数之后使用:标识继承

父类

子类

当类未声明构造函数时,继承其他类时,也不需要在primary constructor显示的声明构造函数,必须在secondary constructor中显示调用父类构造函数,若父类有多个构造函数,可以选择其一进行调用。

所有类定义时默认是final属性,不可被继承。若需要继承,使用open关键字进行修饰。

方法重载:

方法默认是final的,不可被子类重载,若需要被重载,使用关键词open进行修饰,子类重载方法使用override关键词;需要显式 标注可覆盖的成员(开放 open)和覆盖后的成员:

override修饰的方法,默认是可以被继承的。标记为override的成员本身是开放的,也就是说,它可以在子类中覆盖。若希望不被继承,可以使用final关键词修饰。

final override fun study(){}

方法重载规则:

当类同时继承类和实现接口,且有相同方法,且相同方法都有实现时,需要在重载方法中调用所继承的方法,使用关键词super<T>T表示所继承或实现的接口;

open class A {
    open fun f(){ 
         print("A")
    }
    fun a() {
        print("a")
     }
}

interface B {
     // 接口成员默认就是“open”的
     fun f() {
         print("B")
     }
     fun b() {
         print("b")
     }
}

class C(): A(), B {
     // 编译器要求覆盖 f():
     override fun f() {
          // 必须在C中覆盖f()并且提供我们自己的实现来消除歧义,此处这样调用是为了举例说明
          // 调用 A.f()
          super<A>.f()
          // 调用 B.f()
          super<B>.f()
     }
}

当接口未实现方法时,默认为父类的study方法,不需要调用所继承的方法;

抽象类:

允许有abstract修饰的成员方法,非抽象类不允许有抽象方法;

abstract class User {
    abstract fun study()
}

class Person: User {
    // 必须有一个secondary constructor,否则会报This type has a constructor,and thus
    // must be initialized here的编译错误
    constructor(){
    }

    override fun study() {
    }
}

抽象类默认是可被继承的,接口是特殊的抽象类,允许有抽象方法:

interface Reading{
     abstract fun reading()
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,518评论 9 118
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,123评论 18 399
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 11,948评论 0 62
  • Dear: 今年是我陪你度过的第二个七夕了,时间真快呀! 今天我思来想去,到底在那个特殊的节日里送你什么礼物呢?我...
    她和一个故事阅读 3,237评论 1 4
  • “所谓爱,不是不讨厌,而是绝对不会讨厌。” ——《请回答1988》 暴发户家...
    一树青阅读 4,030评论 0 2

友情链接更多精彩内容