理解多态性
多态性基于两个概念:
- 子类化:子类可以继承父类的属性和方法,并添加自己的具体实现。
- 方法重写:子类可以涵盖从父类继承的方法,并提供自己的实现。
当父类引用指向子类的对象时,就会发生多态性。此时,即使父类不知道子类的存在,父类引用也可以调用子类的具体实现。
多态性的好处
多态性提供了以下好处:
- 代码可重用性:通用代码可与不同类型的对象合作,从而提高可重用性。
- 可扩展性:无需修改现有代码即可轻松添加新型号。
- 耦合较少:代码与特定类型的松散耦合,提高了灵活性。
- 可读性:代码更容易阅读和理解,因为它侧重于行为,而不是特定类型。
如何实现多态性
在 Java 通过以下步骤,可以实现多态性:
- 定义一个包含要共享的属性和方法的基类(父类)。
- 继承基类并提供具体实现创建子类。
- 通过父类引用,使用多态性来操作子类对象。
一个多态性的例子
考虑一个动物基类,其中一个 speak() 方法。我们可以创造子类 Dog、Cat 和 Bird,它们是分开实现的 speak() 方法是吠叫、喵喵和鸣叫。利用多态性,我们可以创造一个 forEachAnimal(Animal animal) 方法,它调用 speak() 方法,无论 animal 是什么类型。
public class Animal { public void speak() {} } public class Dog extends Animal { @Override public void speak() { System.out.println("汪汪!"); } } public class Cat extends Animal { @Override public void speak() { System.out.println("喵喵!"); } } public class Bird extends Animal { @Override public void speak() { System.out.println("吱吱!"); } } public class PolymorphismDemo { public static void forEachAnimal(Animal animal) { animal.speak(); } public static void main(String[] args) { Animal[] animals = {new Dog(), new Cat(), new Bird()}; for (Animal animal : animals) { forEachAnimal(animal); } } }
这个例子中,forEachAnimal() 任何方法都可以接受 Animal 不考虑具体类型的对象类型。这显示了多态性如何使代码更加灵活和可重用。
