多态
承灿 2023/10/20
# 1 多态
多态是面向对象编程中的一个核心概念,它指的是同一个接口可以被不同的对象实例所实现,表现出不同的行为。这通常是通过“继承”和“方法重写”实现的,允许在基类中定义一个方法,并在一个或多个派生类中重写该方法。因此,当客户代码调用该方法时,实际执行的方法取决于用于调用方法的对象的类型。
让我们通过一个简单的例子来理解多态:
假设我们有一个“动物园”程序,它包含各种动物,每种动物都会叫。我们可能有一个基类Animal
和几个派生类,如Dog
、Cat
和Bird
。在基类中,我们可能有一个方法makeSound()
,并在每个派生类中重写这个方法,以实现每种动物特有的叫声。
java
// Java代码示例
// 基类(或接口)
abstract class Animal {
// 每个动物都应该实现这个方法以发出声音
public abstract void makeSound();
}
// 派生类1
class Dog extends Animal {
// 狗的具体实现
public void makeSound() {
System.out.println("Woof!");
}
}
// 派生类2
class Cat extends Animal {
// 猫的具体实现
public void makeSound() {
System.out.println("Meow!");
}
}
// 派生类3
class Bird extends Animal {
// 鸟的具体实现
public void makeSound() {
System.out.println("Chirp!");
}
}
public class Zoo {
public static void main(String[] args) {
// 创建具体动物的实例
Animal myDog = new Dog();
Animal myCat = new Cat();
Animal myBird = new Bird();
// 我们可以通过动物类型的引用来调用具体动物的makeSound方法
myDog.makeSound(); // 输出: Woof!
myCat.makeSound(); // 输出: Meow!
myBird.makeSound(); // 输出: Chirp!
}
}
在这个例子中,makeSound
方法是多态的。基类 Animal
定义了一个期望的接口(即 makeSound
方法),具体的实现由其子类(Dog
、Cat
、Bird
)提供。当调用一个动物的 makeSound
方法时,实际上调用的是那个特定类型的动物的方法实现。
这就是多态的强大之处:你可以编写操作基类的代码(例如,一个方法接受一个 Animal
类型的参数),并且它会与任何子类对象一起工作,无论子类的具体实现如何。这大大增加了代码的灵活性和可扩展性。