概念:同样的引用调用同样的方法却做了不同的事
代码:
abstract class Animal {
public abstract void shout();
// 定义抽象shout()方法
}
//定义Cat类继承Animal
class Cat extends Animal {
// 实现shout()方法
public void shout() {
System.out.println("喵喵...");
}
}
//定义Dog类继承Animal
class Dog extends Animal {
// 实现shout()方法
public void shout() {
System.out.println("汪汪...");
}
}
public class Duotai {
public static void main(String[] args) {
Animal cat = new Cat();
Animal dog = new Dog();
animalShout(dog);
animalShout(cat);
// 运行结果:
// 汪汪...
// 喵喵...
}
// 定义一个静态的animalShout()方法,接收一个Animal类型的对象
public static void animalShout(Animal animal) {
animal.shout();
// 调用实际参数的shout()方法
}
}
Animal cat = new Cat();和 Animal dog = new Dog(); 两行代码实现了父类类型变量引用不同的子类对象。
调用animalShout()方法时,将父类引用的两个不同子类对象分别传入,结果打印出了“汪汪…”和“喵喵…”。
由此可见,多态不仅解决了方法同名的问题,而且还使程序变得更加灵括,从而有效地提高程序的可扩展性和可维护性。