class Animal() {
fun eating(): Unit = {
println("Animal eating")
}
}
// Dog 继承了 Animal
class Dog extends Animal() {
override fun eating(): Unit = {
println("我是狗,我吃饭大口口吃")
}
}
// Cat 继承了 Animal
class Cat extends Animal() {
override fun eating(): Unit = {
println("我是猫,我吃饭小口口吃")
}
}
// 测试函数
// 它的参数类型是 父类
fun test(animal: Animal): Unit {
animal.eating()
}
fun main(args: Array<String>): Unit {
val cat = new Cat()
val dog = new Dog()
test(cat) // 传入子类的对象
test(dog)
}
在这段代码中,Animal 类是父类(基类) ,主要起到以下作用:
1. 定义通用行为模板
Animal 类中定义了 eating 方法,描述了动物 “进食” 这一通用行为的默认实现(打印 “Animal eating”),为所有继承它的子类(如 Dog、Cat)提供了行为的基础模板。
2. 实现多态的核心载体
多态是面向对象的重要特性,表现为 “父类引用可以指向子类对象,且调用方法时执行子类的重写实现”。
Dog和Cat类继承Animal后,重写了eating方法,实现了各自特有的进食行为。test函数的参数类型是Animal(父类类型),但实际可以传入Cat、Dog(子类对象)。当调用animal.eating()时,会根据传入的子类对象,执行对应的子类重写方法(如传入Cat时执行 “我是猫,我吃饭小口口吃”),这就是多态的体现。Animal类作为父类类型,是实现这种多态性的关键载体。
3. 代码复用与模块化
通过继承 Animal 类,Dog 和 Cat 无需重复定义 “进食” 行为的框架,只需重写具体实现即可,实现了代码的复用,让类的设计更具模块化和层次性。