多态
一種類型的變量可以掌管多種類型的對象,這就是多态。
說人話:
直覺了解成多種形态。人類就是多态的,黃種人、白種人、黑種人都是屬于人類,人類這一個類可以表示黃種人、白種人、黑種人這三個類,這不就是多态多種形态嗎?
回到程式設計:
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("喵");
}
}
運作結果: