Kotlin 继承
在kotlin中,所有类在默认情况下都是无法被继承的,所有类默认情况下都是final的,如需该类被继承加open关键字,方法需被重写也要加open关键字。包括属性重写
open class Parent(name: String, age: Int) {}
class Child(name: String, age: Int) : Parent(name, age) {}
open class Parent2(name: String) {}
//如果一个类没有primary构造方法,那么这个类的每个secondary构造方法需要通过
//super关键字来初始化父类型,或是通过其他secondary构造方法完成这个任务
//不同的secondary构造方法可以调用父类型不同的构造方法
class Child2 : Parent2 { //该类没有primary构造方法,所以要用super关键字
constructor(name: String) : super(name)
}
重写
open class Fruit {
open fun name() {
println("fruit")
}
fun date() {
println("1 year")
}
}
class Apple : Fruit() {
override fun name() {
super.name()
println("Apple")
}
}
open class Orange : Fruit() {
override fun name() {
super.name()
println("Orange")
}
}
fun main(args: Array<String>) {
var apple = Apple()
apple.name()
apple.date()
}
本质上,val相当于get方法,var 相当于getter和setter方法
接口实现
interface A {
fun method() {
println("A")
}
}
open class B {
open fun method() {
println("B")
}
}
class C : A, B {
override fun method() {
super<A>.method() //调用的是A类中的方法
super<B>.method()//调用的是B类中的方法
}
}
fun main(args: Array<String>) {
val c=C()
c.method()
}