继承
1. 被继承
如果一个类要被继承 得使用open修饰
open class Perple(){
}
2. 构造函数
2.1 子类有主构造函数
如果子类有主构造函数,则基类必须在主构造函数中立即初始化
open class Person(var name:String){
}
class Student(name : String,var age : String):Person(name){
}
2.2 子类没有主构造函数
如果子类没有主构造函数,则需要在每一个子构造函数中使用super初始化基类
open class Person(var name:String){
}
class Student:Person{
constructor(name:String):super(name){
}
}
3. 重写
3.1 重写函数
在基类中,使用fun修饰函数时,默认的为final修饰,不能被重写,只有手动添加open,子类使用override重写
open class Person(){
open fun getName(){
print("父类")
}
}
class Child : Person(){
override fun getName(){
print("子类")
}
}
fun main(string:Array<String>){
Child child = Child()
child.getName()
}
输出:子类
如果继承和实现中有两个相同的方法,可以使用super来继承
open class A{
open fun f(){
print("A")
}
}
interface B{
fun f(){
print("B")
}
}
class C :A(),B{
override fun f(){
super<A>.f() 调用A的f方法
super<B>.f() 调用B的f方法
}
}
3.2 重写属性
可以使用override,属性必须是兼容类型,可以用var重写一个val,但是反过来则不行.
open class Foo{
open val x:String get{}
}
class Barl : Foo(){
override val x : String = __
}