📜  Kotlin 中的覆盖规则(1)

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

Kotlin 中的覆盖规则

在 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 方法,并新增了一个输出学生年级的逻辑。

open 关键字

在 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 关键字

在子类中,可以使用 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 关键字等。在编写代码时,应根据实际需求合理使用这些关键字,以实现代码功能和结构的最佳设计。