多态
一种类型的变量可以掌管多种类型的对象,这就是多态。
说人话:
直观理解成多种形态。人类就是多态的,黄种人、白种人、黑种人都是属于人类,人类这一个类可以表示黄种人、白种人、黑种人这三个类,这不就是多态多种形态吗?
回到编程:
Animal(动物)类型的变量可以有多种形态,它可以管理它的子类Cat、Dog、Fish、Tiger……的对象,也就是说可以这样写:
Animal animal1 = new Cat();
Animal animal2 = new Dog();
Animal animal3 = new Fish();
Animal animal4 = new Tiger();
类方法的多态
与变量一样,类的方法也是有多态性的。
举个例子:
一个Animal类型的变量,如果调用它的.bark()方法,那么这个方法的实现也是多态性的。
如果这个Animal类型变量实际管理的是Cat对象,那么我们在使用.bark()时就会调用Cat类的.bark()方法,如果它实际管理的是一个Dog对象,那么就会调用Dog类的.bark()。(如果Cat或Dog类没有.bark()方法则调用Animal的.bark()方法)也就是说,根据不同的对象,调用不同的方法。
不妨做个测试,我们将Cat对象交给一个Animal变量,然后使用.bark()方法,看看它究竟使用了Cat的.bark()方法还是Animal的.bark()方法:
Animal类代码:
package zoom;
public class Animal {
public void bark() {
System.out.println("I am Animal");
}
public static void main(String[] args) {
Animal animal = new Cat();
animal.bark();
}
}
Cat类代码:
package zoom;
public class Cat extends Animal {
@Override
public void bark() {
// TODO Auto-generated method stub
System.out.println("喵");
}
}
运行结果: