深入浅析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的子类,并在主函数中创建了实例并调用方法。