Kotlin 中的继承/实现
1 继承
1.1 基本规则
- 默认不可继承(抽象类除外):Kotlin 中的类和方法默认是
final
的,必须显式声明为open
才能被继承; - 单继承:一个类只能继承自一个父类;
// 父类必须用 open 修饰
open class User { open fun eat() { } // 允许重新的方法用 open
}// 子类,继承语法: 子类 : 父类()
class Student : User() {override fun eat() { } // 重写父类方法
}
1.2 主构造函数继承
父类参数直接在子类声明中传递:
open class User(name: String) {open fun eat() {}
}class Student(name: String) : User(name) {override fun eat() {}
}
1.3 次构造函数继承
用 super
调用父类构造:
class Student : User {constructor(name: String) : super(name)
}
2 接口实现
基本规则:
- 多实现:一个类可以实现多个接口;
- 默认方法:接口可以包含默认实现的方法;
// 接口定义
interface Flyable {fun fly() // 抽象方法(默认)fun glide() = println("Gliding") // 带默认实现
}interface Swimmable {fun swim()
}// 类实现多个接口
class Duck : Flyable, Swimmable {override fun fly() = println("Duck flying")override fun swim() = println("Duck swimming")
}
3 抽象类和抽象方法
abstract class Shape {abstract val area: Double // 抽象属性abstract fun draw() // 抽象方法
}class Circle(val radius: Double) : Shape() {override val area: Double get() = Math.PI * radius * radiusoverride fun draw() = println("Drawing a circle")
}