1.父型別的引用可以指向子型別的物件:
Parent p = new Child();
2.當使用多型方式呼叫方法時,首先檢查父類中是否有該方法,如果沒有,則編譯錯誤;如果有,再去呼叫子類的該同名方法。
3.靜態static方法屬於特殊情況,靜態方法只能繼承,不能重寫Override,如果子類中定義了同名同形式的靜態方法,它對父類方法只起到隱藏的作用。呼叫的時候用誰的引用,則呼叫誰的版本。
4.使用多型,只能使用重寫父類的方法,若方法只在父類定義而沒有重寫,呼叫的是父類的方法。
5.如果想要呼叫子類中有而父類中沒有的方法,需要進行強制型別轉換,如上面的例子中,將p轉換為子類Child型別的引用。
6.向上型別轉換(Upcast):將子型別轉換為父型別,不需要顯示指定,即不需要加上前面的小括號和父類型別名。
7.向下型別轉換(Downcast):將父型別轉換為子型別;對於向下的型別轉換,必須要顯式指定,即必須要使用強制型別轉換。並且父型別的引用必須指向子類的物件,即指向誰才能轉換成誰。
9.示例:
1 public class PolyTest 2 { 3 public static void main(String[] args) 4 { 5 6 //向上型別轉換 7 Cat cat = new Cat(); 8 Animal animal = cat; 9 animal.sing(); 10 11 12 //向下型別轉換 13 Animal a = new Cat(); 14 Cat c = (Cat)a; 15 c.sing(); 16 c.eat(); 17 18 19 //編譯錯誤 20 //用父類引用呼叫父類不存在的方法 21 //Animal a1 = new Cat(); 22 //a1.eat(); 23 24 //編譯錯誤 25 //向下型別轉換時只能轉向指向的物件型別 26 //Animal a2 = new Cat(); 27 //Cat c2 = (Dog)a2; 28 29 30 31 } 32 } 33 class Animal 34 { 35 public void sing() 36 { 37 System.out.println("Animal is singing!"); 38 } 39 } 40 class Dog extends Animal 41 { 42 public void sing() 43 { 44 System.out.println("Dog is singing!"); 45 } 46 } 47 class Cat extends Animal 48 { 49 public void sing() 50 { 51 System.out.println("Cat is singing!"); 52 } 53 public void eat() 54 { 55 System.out.println("Cat is eating!"); 56 } 57 }