继承时构造函数的问题
子类中有主构造函数,就会默认调用父类中的构造函数,所以冒号后面继承父类的时候需要加上
()
。
class Student (val sno:String, val grade:Int, name:String, age:Int): Person(name, age){
constructor(name: String, age: Int):this("",0,name, age)
constructor():this("",0)
}
子类中没有主构造函数,就不会默认调用父类中的构造函数,但是需要在子类的次构造函数中显式调用父类中的构造函数
class Student2 :Person {
constructor(name:String, age:Int) : super(name, age)
}
所谓的主构造函数是直接将属性定义在类名后面
如果子类要重写父类的方法或者属性,抽了类名前面加上open以外,要被重写的属性或者方法前面也要加上open
open class Animal{
open var name:String = "normal animal"
open var age:Int = 3
protected open fun eat() = print("eating")
}
class Cat : Animal(){
override var name = "Cat"
override var age = 13
override fun eat() = print("cat eating")
}