📅  最后修改于: 2023-12-03 15:32:30.615000             🧑  作者: Mango
在 Kotlin 中,子类可以通过继承父类来继承其属性和方法。但是,当子类需要修改或补充父类的方法行为时,就会用到覆盖(override)规则。本文将介绍 Kotlin 中的覆盖规则,包括继承、重写、open 关键字、super 关键字等。
继承是指子类继承父类的属性和方法,可以使用 :
符号来实现继承。例如:
open class Person(val name: String) {
fun greet() {
println("Hello, I am $name.")
}
}
class Student(name: String, val grade: Int) : Person(name)
在上面的示例中,Student
类继承自 Person
类,并且新增了一个 grade
属性。
重写(override)是指子类修改或补充父类的方法行为。要重写父类的方法,需要在子类中重新定义该方法,并使用 override
关键字。例如:
open class Person(val name: String) {
open fun sayHello() {
println("Hello!")
}
}
class Student(name: String, val grade: Int) : Person(name) {
override fun sayHello() {
println("Hello, I am $name, and my grade is $grade.")
}
}
在上面的示例中,Student
类重写了 Person
类中的 sayHello
方法,并新增了一个输出学生年级的逻辑。
在 Kotlin 中,默认情况下类和类中的方法都是不允许被重写的,如果需要允许重写,则需要在类或方法前加上 open
关键字。例如:
open class Person(val name: String) {
open fun sayHello() {
println("Hello!")
}
}
open class Student(name: String, val grade: Int) : Person(name) {
override fun sayHello() {
println("Hello, I am $name, and my grade is $grade.")
}
}
在上面的示例中,Person
类和 sayHello
方法都被定义为 open
,并且 Student
类继承自 Person
类。
在子类中,可以使用 super
关键字来调用父类中被覆盖的方法。例如:
open class Person(val name: String) {
open fun sayHello() {
println("Hello!")
}
}
class Student(name: String, val grade: Int) : Person(name) {
override fun sayHello() {
super.sayHello()
println("I am a student, and my grade is $grade.")
}
}
在上面的示例中,Student
类重写了 Person
类中的 sayHello
方法,并使用 super.sayHello()
调用了父类的 sayHello
方法,再输出学生的年级信息。
Kotlin 的覆盖规则包括继承、重写、open 关键字、super 关键字等。在编写代码时,应根据实际需求合理使用这些关键字,以实现代码功能和结构的最佳设计。