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("我在读大学") } }
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() } }
你可以用一个var属性重写一个val属性,但是反过来不行。因为val属性本身定义了getter方法,重写为var属性会在衍生类中额外声明一个setter方法
你可以在主构造函数中使用 override 关键字作为属性声明的一部分:
原文:https://www.cnblogs.com/endian11/p/10855688.html