前言
前文讲到,Kotlin中万物皆对象,连《基础数值类型》都不放过。
除了文字版本,也有Xmind版本 github地址
带几个问题吧
① Any 跟object什么区别?
② 子类的初始化顺序如何?
③ super的覆盖规则是什么?
④ 与java对比,kotlin在继承有什么变化?加强了什么?
本文从以下几个方面讲继承
- 根是Any类
- 构造函数
- 重写方法
- 重写属性
- 中场小结
- 派生类初始化顺序
- 调用超类实现
- super覆盖规则
根是Any类
首先,Any 不是 java.lang.Object。
在Kotlin中,Any是所有类的超类
如果没有显式声明超类型声明的类,其默认的超类是Any
Any 默认提供了三个函数
- equals()
- hashCode()
- toString()
把超类型 放在冒号 之后
open class Base(p: Int)
class Derived(p: Int) : Base(p)
构造函数
子类有主构造函数
如果子类有主构造函数, 则基类必须在主构造函数中立即初始化。
这话看起来看起来,比较难懂。
先看个范例
open class Person(var name : String, var age : Int, var score : Int){// 基类
}
class Student(name : String, age : Int, var no : String, score : Int) : Person(name, age, score) {
}
// 测试
fun main(args: Array<String>) {
val s = Student("wangxueming", 18, "S12346",