c语言编程笔录

首页 >   > 笔记大全

笔记大全

深入浅析kotlin中的继承与类

更新时间:2023-07-08

介绍kotlin中的类与继承

Kotlin是一种面向对象的语言,拥有类和继承的概念。在Kotlin中,一个类是对一组有相似属性和行为的对象的抽象,而继承是在已存在的类的基础上创建新的类的过程。

在Kotlin中可以通过class关键字来创建类,例如下面这个例子:

class Person(val name: String, var age: Int) {
    // Class body
}

上面的代码中定义了一个Person类,包含了一个只读属性name和一个可变属性age。这个类是一个基础类,我们可以通过继承来创建一个更具体的类。

如何使用继承

在Kotlin中,我们可以通过继承来扩展已经存在的类。在一个子类中可以通过使用“:”来表示继承关系。例如下面这个例子:

// 定义基础类
open class Person(val name: String, var age: Int) {
    fun speak() {
        println("我的名字是 $name,我今年 $age 岁了")
    }
}

// 定义继承基础类的子类
class Student(name: String, age: Int, val grade: Int) : Person(name, age) {
    fun study() {
        println("$name 在读 $grade 年级")
    }
}

在上面的代码中,Person是一个基础类,包含了一个speak方法,而Student是一个继承了基础类的子类。在Student中我们加入了一个新的属性grade以及一个新的方法study。

super关键字

在子类中可以使用super关键字来调用基础类的方法或属性。例如下面这个例子:

// 定义基础类
open class Person(val name: String, var age: Int) {
    open fun speak() {
        println("我的名字是 $name,我今年 $age 岁了")
    }
}

// 定义继承基础类的子类
class Student(name: String, age:Int, val grade: Int) : Person(name, age) {
    override fun speak() {
        super.speak() // 调用基础类的speak方法
        println("$name 在读 $grade 年级")
    }
}

fun main() {
    val tom = Student("Tom", 18, 1)
    tom.speak()
}

在上面的代码中,我们通过override关键字覆盖了基础类中的speak方法,并在方法中通过super关键字调用了基础类中的speak方法。

抽象类和接口

在Kotlin中,我们也可以定义抽象类和接口,用来作为基础类或者约束实现类的行为。抽象类是不能被实例化的类,它通常包含一些具体方法以及一些抽象方法,而接口只包含方法声明,没有具体实现。

// 定义抽象类
abstract class Animal(val name: String) {
    abstract fun makeSound()
}

// 定义实现Animal的子类
class Dog(name: String) : Animal(name) {
    override fun makeSound() {
        println("$name 汪汪叫")
    }
}

// 定义接口
interface Flyable {
    fun fly()
}

// 定义实现Flyable的类
class Bird(val name: String) : Flyable {
    override fun fly() {
        println("$name 在飞翔")
    }
}

fun main() {
    val dog = Dog("小狗")
    dog.makeSound()

    val bird = Bird("小鸟")
    bird.fly()
}

在上面的代码中,我们定义了一个Animal抽象类,它有一个具体属性name和一个抽象方法makeSound。我们也定义了一个Flyable接口,它有一个方法fly。然后我们分别实现了Animal和Flyable的子类,并在主函数中创建了实例并调用方法。