1.Kotlin继承
1)在Kotlin中,所有类在默认情况下都是无法被继承的。
2)换句话说,在Kotlin中,所有类默认情况下都是final的。
3)open的含义与final相反。
4)在Kotlin中,如果一个类没有primary构造方法,那么这个类的每个secondary构造方法就需要通过super关键字来初始化类型,或者通过其他secondary构造方法完成这个任务不同的secondary构造方法可以调用父类型不同的构造方法。
- 示例代码
//在Kotlin中,所有类在默认情况下都是无法被继承的
//换句话说,在Kotlin中,所有类默认情况下都是final的
//open的含义与final相反
open class Parent(name: String, age: Int) {
}
class Child(name: String, age: Int) : Parent(name, age) {
}
open class Parent2(name: String) {
}
//在Kotlin中,如果一个类没有primary构造方法,那么这个类的每个secondary构造方法就需要通过
//super关键字来初始化类型,或者通过其他secondary构造方法完成这个任务
//不同的secondary构造方法可以调用父类型不同的构造方法
class Child2 : Parent2 {
constructor(name: String) : super(name) {
}
}
2.方法重写
在Kotlin中,如果一个子类的某个方法重写了父类中的某个方法,子类方法必须要加上“override”关键字,且父类方法要加上“open”关键字。
- 示例代码
open class Fruit {
open fun name() {
println("fruit")
}
fun expirationDate() {
println("1 month")
}
}
class Apple : Fruit() {
override fun name() {
println("apple")
}
}
open class Orange : Fruit() {
final override fun name() {
println("orange")
}
}
fun main(args: Array<String>) {
var apple = Apple();
apple.name()
apple.expirationDate()
}
- 运行结果
apple
1 month
3.属性重写
在Kotlin中,如果一个子类的某个属性重写了父类中的某个属性,子类属性必须要加上“override”关键字,且父类属性要加上“open”关键字。
- 示例代码
open class MyParent {
open val name: String = "parent"
}
class MyChild : MyParent() {
override val name: String = "child"
}
fun main(args: Array<String>) {
var myChild = MyChild()
println(myChild.name)
println("-----------")
var myChild3 = MyChild3();
myChild3.method()
println(myChild3.name)
}
class MyChild2(override val name: String) : MyParent() {
}
open class MyParent3 {
open fun method() {
println("parent method")
}
open val name: String get() = "parent"
}
//1.val 可以override val
//2. var 可以override val
//3.val 无法override var
//本质上,val相对于get方法;var相对于get于set方法
class MyChild3 : MyParent3() {
override fun method() {
super.method()
println("child method")
}
override val name: String
get() = super.name + "and child"
}
- 运行结果
child
-----------
parent method
child method
parentand child
1)val 可以override val
2)var 可以override val
3)val 无法override var
本质上,val相对于get方法;var相对于get与set方法
网友评论