kotlin重写
- 在基类中,使用fun声明函数时,此函数默认修饰符为final,不能被子类重写。如果允许子类重写,就添加open修饰它,子类重写方法使用
override
-
open class Personage(name: String){ constructor(name: String,age: Int):this(name){ println("基类次级构造函数") } open fun study(){ println("我毕业了") } } //如果子类没有主构造函数,则必须在每一个二级构造函数中用super关键字 //初始化基类,或者在代理另一个构造函数。初始化基类时,可以调用基类的 //不同构造方法 class Student:Personage{ constructor(name: String,age:Int,no:String,score:Int):super(name,age){ println("学生姓名:$name") println("学生年龄:$age") println("学生学号:$no") println("学生分数:$score") } override fun study() { println("我在读大学") } }
- 如果有多个相同的方法(继承或者实现自其他类,如A、B类),则必须要重写该方法,使用super范型去选择性地调用父类的实现
fun main(args:Array<String>){ val c = C() c.f(); } open class A{ open fun f(){ println("A") } fun A(){ println("a") } } interface B{ fun f(){ println("B") } fun B(){ println("b") } } class C:A(),B{ override fun f() { super<A>.f() super<B>.f() } }
- 属性重写
- 属性重写使用 override 关键字,属性必须具有兼容类型,每一个声明的属性都可以通过初始化程序或者getter方法被重写
-
你可以用一个var属性重写一个val属性,但是反过来不行。因为val属性本身定义了getter方法,重写为var属性会在衍生类中额外声明一个setter方法
你可以在主构造函数中使用 override 关键字作为属性声明的一部分:

更多精彩