1. 程式人生 > >Java面向對象之多態(向上向下轉型) 入門實例

Java面向對象之多態(向上向下轉型) 入門實例

end 判斷 nds exceptio 自己的 AC void 限定 abs

一、基礎概念

  多態

    重點是對象的多態性。某一事物的多種體現形態。

  多態的作用:

    1.提高了代碼的擴展性,後期出現的功能,可以被之前的程序所執行。

    2.不能使用子類特有的功能。只能使用覆蓋父類的功能。

  多態的前提:

    1.必須要有繼承關系或者實現關系。

    2.通常對方法進行重寫、覆蓋。

    3.父類或者接口要引用指向子類對象。

  多態向上轉型:

    1.提高程序的擴展性,隱藏了具體子類型

    2.只能使用父類中的功能,不能使用子類特有的功能。功能被限定了。

  多態向下轉型:

    1.可以使用子類型的特有功能。

    2.必須面對具體的子類型。

    3.為了避免運行時出現ClassCastException 問題,需要用關鍵字instanceof來進行判斷。

二、代碼實例

 1 //父類Animal
 2 abstract class Animal
 3 {
 4     abstract void eat();
 5     abstract void sleep();
 6 }
 7 
 8 //Dog類繼承Animal類
 9 class Dog extends Animal
10 {
11     /**
12     將Animal類中的方法重寫
13     */
14     void eat()
15     {
16         System.out.println("dog eat 吃骨頭");
17 } 18 void sleep() 19 { 20 System.out.println("dog sleep ....."); 21 } 22 23 /** 24 自己特有的方法 25 */ 26 void say() 27 { 28 System.out.println("dog say ....."); 29 } 30 } 31 32 //Cat類繼承Animal類 33 class Cat extends Animal 34 { 35 /** 36 將Animal類中的方法重寫
37 */ 38 void eat() 39 { 40 System.out.println("Cat eat 吃魚"); 41 } 42 void sleep() 43 { 44 System.out.println("Cat sleep ....."); 45 } 46 } 47 48 class DuoTaiDemo 49 { 50 //封裝Dog類的方法 51 public static void method(Dog d) 52 { 53 d.eat(); 54 d.sleep(); 55 d.say(); 56 } 57 58 //封裝Cat類的方法 59 public static void method(Cat c) 60 { 61 c.eat(); 62 c.sleep(); 63 } 64 65 //封裝父類Animal的方法 66 public static void method(Animal s) 67 { 68 s.eat(); 69 s.sleep(); 70 } 71 72 public static void main(String[] args) 73 { 74 Dog d1 = new Dog(); 75 method(d1); 76 77 Cat c = new Cat(); 78 method(c); 79 80 Animal s = new Dog(); //多態性,向上轉型,將Dog提升為Animal。 81 method(s); //只能使用覆蓋了父類Animal的eat方法和sleep方法。不能使用Dog類中自己的say方法。 82 83 Animal a = new Cat(); //多態性,向上轉型。 84 method(a); 85 86 /** 87 向下轉型,為了避免運行時出現ClassCastException 問題, 88 需要用關鍵字instanceof來進行判斷。 89 */ 90 if (s instanceof Dog) 91 { 92 Dog d2 = (Dog)s; 93 d2.eat(); 94 d2.sleep(); 95 d2.say(); 96 } 97 } 98 }

三、運行代碼

  技術分享圖片

Java面向對象之多態(向上向下轉型) 入門實例