📜  Kotlin 继承(1)

📅  最后修改于: 2023-12-03 15:32:31.215000             🧑  作者: Mango

Kotlin 继承

继承是面向对象编程中的重要概念之一,它允许我们通过定义父类来抽象出一些通用的属性和方法,然后让子类继承这些通用的特性,并且可以在此基础上进行细节的改良和拓展。在Kotlin中,继承是通过关键字openclass实现的。

定义父类

定义一个简单的父类,如下:

open class Person(val name: String, var age: Int) {
    fun speak() {
        println("Hello, my name is $name.")
    }
}

上述代码定义了一个名为Person的类,它有两个属性nameage,还有一个方法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显式调用父类方法。