多態性是指允許不同類型的物件對相同訊息做出對應。具有靈活性、抽象、行為共享、程式碼共享的優勢,共享就意味著最大化利用和簡潔,還有就是載入速度。
一、多態的作用
#消除型別之間的耦合關係。即同一事件發生在不同的物件上會產生不同的結果。
二、多態的實作形式
1.重載(發生在同一個類別)
2.覆寫(發生在子類別中)
三、多態的好處
1.可替換性
2.可擴展性
#3 .接口性(多態是超累透過方法簽名,向子類別提供了一個共同的介面)
4.簡潔性
#5.靈活性
#注意:這些好處說起來比較虛,只有你真正應用的時候才能體會得到。
四、多型存在的三個前提
1.要有繼承關係
2.子類別要重寫父類別的方法
3.父類別引用指向子類別物件
程式碼範例說明:定義一個父類別Animal,一個子類別Dog
1 //父类——Animal 2 public class Animal { 3 int num = 44; 4 static int age = 2; 5 6 public void eat() { 7 System.out.println("动物都需要吃东西"); 8 } 9 10 public static void sleep() {11 System.out.println("动物需要睡觉");12 }13 14 public void run() {15 System.out.println("长腿的动物爱奔跑");16 }17 }
1 //子类——Dog 2 public class Dog extends Animal { 3 int num = 5; 4 static int age = 5; 5 String name = "Tom"; 6 7 public void eat() { 8 System.out.println("我爱吃狗粮"); 9 }10 11 public static void sleep() {12 System.out.println("我是一只不爱睡觉的活泼狗狗");13 }14 15 public void catchMouse() {16 System.out.println("我喜欢多管闲事");17 }18 19 }
1 //测试类 2 public class Demo_Test { 3 public static void main(String[] args) { 4 Animal a = new Dog(); 5 a.eat(); 6 a.sleep(); 7 a.run(); 8 9 System.out.println(a.num);10 System.out.println(a.age);11 }12 }
#注意事項示範:
從上面的列印結果(7),我們可以得出:
1)成員變數:列印父類,子類別沒有出來;
2)成員方法:父類別為靜態的就列印父類,非靜態的直接列印子類別;
3)在左側5、6中有報錯,是因為我們在呼叫靜態成員時使用的方法不對。 (下面會截圖示範正確的)
4)當呼叫父類別裡沒有的方法時(a.catchMouse();),會報錯。 )
此時,多態不能使用自己特有的屬性和方法,這是多態的弊端,那又該如何解決呢?
答案:把這個父類別引用指向子類別物件a,再強制變回Dog型別。這樣a就是Dog類型的引用了,指向的也是Dog物件了。
以上是Java基礎-多型的詳細內容。更多資訊請關注PHP中文網其他相關文章!