Z
ZHANK
面向对象

继承与多态

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()
    }
}