多态(Polymorphism)是面向对象编程(OOP)的三大特性之一,另外两个是封装(Encapsulation)和继承(Inheritance)。多态允许不同的对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式。在程序中,多态通常通过父类的引用指向子类的对象来实现,这样可以在运行期间决定具体调用哪个类的方法,从而实现不同的功能。
多态的发生需要满足以下三个必要条件:
继承:
子类必须继承父类的属性和方法。
重写:
子类必须重写父类的方法,以实现不同的行为。
父类引用指向子类对象:
通过父类的引用变量来指向子类的对象,这样在运行期间才能确定具体调用哪个类的方法。
多态的优点包括:
代码灵活性:可以在不修改源代码的情况下,通过更换对象类型来实现不同的行为。
可扩展性:新增对象类型时,不需要修改已有的代码,只需确保新增类型满足继承关系并重写必要的方法。
可维护性:统一的接口使得代码更易于理解和维护。
示例代码
```java
// 定义一个Animal类
class Animal {
public void eat() {
System.out.println("动物吃饭");
}
}
// 定义一个Dog类,继承自Animal类
class Dog extends Animal {
@Override
public void eat() {
System.out.println("狗吃饭");
}
}
// 定义一个Cat类,继承自Animal类
class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫吃饭");
}
}
public class PolymorphismExample {
public static void main(String[] args) {
Animal myAnimal = new Animal(); // 父类对象
Animal myDog = new Dog(); // 子类对象
Animal myCat = new Cat(); // 子类对象
myAnimal.eat(); // 输出: 动物吃饭
myDog.eat();// 输出: 狗吃饭
myCat.eat();// 输出: 猫吃饭
}
}
```
在这个示例中,`myDog`和`myCat`都是`Animal`类的引用,但它们分别指向`Dog`和`Cat`类的对象。当我们调用`eat()`方法时,根据实际对象类型的不同,会调用相应的方法,这就是多态的体现。