1.什麼是多态?
多态是具有表現多種形态的的能力特征。更專業的說法是:同一個實作接口使用不同的執行個體而執行不同的操作。
2.多态性與繼承,方法重寫密切相關。
3.子類到父類的轉換 (向上轉型)
// 将int型常量或變量的值賦給double型變量,可以自動進行類型轉換
int i =5;
double d1 =5;
// 将double 型常量或變量的值賦給 int型變量,進行強制類型轉換
double d2 =3.14;
int a=(int)d2;
4.在引用資料類型的子類和父類之間也存在類型轉換,如下代碼:
Dog dog= new Dog ("歐歐","雪納瑞"); //不涉及類型轉換
dog.eat();
Pet pet = new Dog ("歐歐","雪納瑞"); // 子類到父類的轉換
pet.eat(); // 會調用Dog類重寫的eat 方法,而不是pet類的eat() 方法
pet.catchingFlyDisc(); // 編譯錯誤, 父類的引用無法調用子類的特有方法。
5.子類轉換成父類的規則:
(1)将一個父類的引用指向一個子類的對象,稱為向上轉型(upcasting),自動進行類型轉型。
(2)此時通過父類引用變量調用的方法是子類覆寫或繼承父類的方法,不是父類的方法。
(3)此時通過父類引用變量無法調用子類特有的方法。
6.使用父類作為方法形參實作多态。
使用父類作為方法的形參,是Java中實作和使用多态的主要方式之一。
7.使用父類作為方法傳回值實作多态。
使用父類作為方法的傳回值,是Java中實作和使用多态的另一種方式。
8.總結: (實作多态的3個條件)
繼承的存在(繼承是多态的基礎,沒有繼承就沒有多态)。
子類重寫父類的方法(多态下調用子類重寫後的方法)
父類引用變量指向子類對象(子類到父類的轉換)。