继承与多态
open 允许继承、override 重写、抽象类、接口
继承与多态
Kotlin 默认所有类都是 final——必须用 open 显式允许继承。
学完本章你将: 掌握 open 继承、override 重写、抽象类、接口。
继承
kotlin
open class Animal(val name: String) {
open fun sound() = "..."
}
class Dog(name: String) : Animal(name) {
override fun sound() = "汪汪"
}
class Cat(name: String) : Animal(name) {
override fun sound() = "喵喵"
}
抽象类
kotlin
abstract class Shape {
abstract fun area(): Double
fun description() = "这是一个图形" // 可以有实现
}
class Circle(val radius: Double) : Shape() {
override fun area() = Math.PI * radius * radius
}
接口
kotlin
interface Flyable {
fun fly() // 抽象方法
fun land() { println("着陆") } // 默认实现
}
interface Swimmable {
fun swim()
}
// 多接口实现
class Duck : Flyable, Swimmable {
override fun fly() = println("鸭子飞")
override fun swim() = println("鸭子游")
}
菱形继承解决
kotlin
interface A { fun foo() = println("A") }
interface B { fun foo() = println("B") }
class C : A, B {
override fun foo() {
super<A>.foo() // 显式选择
super<B>.foo()
}
}