📅  最后修改于: 2023-12-03 15:32:31.215000             🧑  作者: Mango
继承是面向对象编程中的重要概念之一,它允许我们通过定义父类来抽象出一些通用的属性和方法,然后让子类继承这些通用的特性,并且可以在此基础上进行细节的改良和拓展。在Kotlin中,继承是通过关键字open
和class
实现的。
定义一个简单的父类,如下:
open class Person(val name: String, var age: Int) {
fun speak() {
println("Hello, my name is $name.")
}
}
上述代码定义了一个名为Person
的类,它有两个属性name
和age
,还有一个方法speak
。注意这里的open
关键字,它的作用是允许其他类继承该类。
定义一个简单的子类,如下:
class Student(name: String, age: Int, var grade: Int) : Person(name, age) {
fun study() {
println("I am studying in class $grade.")
}
}
上述代码定义了一个名为Student
的子类,它继承自Person
类,并增加了一个属性grade
和一个方法study
。注意这里有个冒号,在冒号之后指定父类。
在上述代码中,子类Student
有3个参数,其中前两个参数为父类的属性,需要调用父类的构造函数来初始化它们。在Kotlin中,调用父类构造函数有两种方式:
super
关键字调用;this
关键字调用,然后再调用父类构造函数。下面是使用super
关键字的示例:
class Student(name: String, age: Int, var grade: Int) : Person(name, age) {
//...
//调用父类构造函数
init {
println("Student ${name} is created.")
}
}
下面是使用this
关键字的示例:
class Student(name: String, age: Int, var grade: Int) : Person(name, age) {
//...
constructor(name: String, age: Int) : this(name, age, 1) {
//调用父类构造函数
println("Student ${name} is created.")
}
}
在子类中重写父类的方法,语法如下:
override fun speak() {
super.speak() //调用父类方法
println("I am a student.")
}
上述代码中,override
关键字用于表示此方法是一个重写父类方法的方法,super
关键字用于显式调用父类的方法。
open
关键字定义父类,允许其他类继承该类;:
指定父类,并使用关键字override
重写父类方法,使用关键字super
显式调用父类方法。