Java基礎十一--多態,java--多態

來源:互聯網
上載者:User

Java基礎十一--多態,java--多態
Java基礎十一--多態一、多態定義

簡單說:就是一個對象對應著不同類型.

多態在代碼中的體現:
父類或者介面的引用指向其子類的對象。

  1 /*  2   3 對象的多態性。  4   5 class 動物  6 {}  7   8 class 貓 extends 動物  9 {} 10  11 class 狗 extends 動物 12 {} 13  14  15  16 貓 x = new 貓(); 17  18 動物 x = new 貓();//一個對象,兩種形態。 19  20  21  22 貓這類事物即具備者貓的形態,又具備著動物的形態。 23 這就是對象的多態性。  24  25 簡單說:就是一個對象對應著不同類型.  26  27 多態在代碼中的體現: 28     父類或者介面的引用指向其子類的對象。 29  30  31 多態的好處: 32     提高了代碼的擴充性,前期定義的代碼可以使用後期的內容。 33  34 多態的弊端: 35     前期定義的內容不能使用(調用)後期子類的特有內容。通過向下轉型來解決。 36  37 多態的前提: 38     1,必須有關係,繼承,實現。(實現是特殊的繼承) 39     2,要有覆蓋。  40  41  42  43 */ 44  45 abstract class Animal 46 { 47     abstract void eat(); 48  49 } 50  51 class Dog extends Animal 52 { 53     void eat() 54     { 55         System.out.println("啃骨頭"); 56     } 57     void lookHome() 58     { 59         System.out.println("看家"); 60     } 61 } 62  63 class Cat extends Animal 64 { 65     void eat() 66     { 67         System.out.println("吃魚"); 68     } 69     void catchMouse() 70     { 71         System.out.println("抓老鼠"); 72     } 73 } 74  75 class Pig extends Animal 76 { 77     void eat() 78     { 79         System.out.println("飼料"); 80     } 81     void gongDi() 82     { 83         System.out.println("拱地"); 84     } 85 } 86  87  88  89 class DuoTaiDemo  90 { 91     public static void main(String[] args)  92     { 93          94 //        Cat c = new Cat(); 95 //        c.eat(); 96 //        c.catchMouse(); 97  98         Animal a = new Cat(); //自動型別提升,貓對象提升了動物類型。但是特有功能無法s訪問。 99                             //作用就是限制對特有功能的訪問。100                             //專業講:向上轉型。將子類型隱藏。就不用使用子類的特有方法。101 102 103 //        a.eat();104 105         //如果還想用具體動物貓的特有功能。 106         //你可以將該對象進行向下轉型。107 //        Cat c = (Cat)a;//向下轉型的目的是為了使用子類中的特有方法。108 //        c.eat();109 //        c.catchMouse();110 111 //        注意:對於轉型,自始自終都是子類對象在做著類型的變化。112 //        Animal a1 = new Dog();113 //        Cat c1 = (Cat)a1;//ClassCastException114 115 116         /*117         Cat c = new Cat();118 119 //        Dog d = new Dog();120 121 //        c.eat();122         method(c);123 //        method(d);124 //        method(new Pig());125         */126 127         method(new  Dog());128 129     }130 131     public static void method(Animal a)//Animal a = new Dog();132     {133         a.eat();134      //解決類型匹配問題的時候,我們就可以判斷一下135         if(a instanceof Cat)//instanceof:用於判斷對象的具體類型。只能用於引用資料類型判斷136 //                        //通常在向下轉型前用於健壯性的判斷。137 138         {139             Cat c = (Cat)a;140             c.catchMouse();141         }142         else if(a instanceof Dog)143         {144             Dog d = (Dog)a;145             d.lookHome();146         }147         else148         {149         150         }151         152     }153     /*154     public static void method(Cat c)155     {156         c.eat();157     }158     public static void method(Dog d)159     {    160         161     }162     */    163 }

向上轉型:父類引用指向子類對象。子類的特有功能無法訪問。

向下轉型:子類引用指向父類對象。

1 Animal a = new Cat(); //自動型別提升,貓對象提升了動物類型。但是特有功能無法s訪問。2                       //作用就是限制對特有功能的訪問。3                       //專業講:向上轉型。將子類型隱藏。就不用使用子類的特有方法。4 5 Cat c = (Cat)a;//向下轉型的目的是為了使用子類中的特有方法。

在實際應用中,向上轉型便於代碼擴充(之前寫的代碼以後能用,只有繼承或者實現基類了的),但是要用到子類特有的功能的時候,必須向下轉型。

很多時候我們向上轉型為Object類,當用到自己特有功能的時候,我們向下轉型轉回來。

 

二、多態生活執行個體
 1 /* 2 畢老師和畢姥爺的故事。 3 */ 4  5 class 畢姥爺 6 { 7     void 講課() 8     { 9         System.out.println("管理");10     }11     void 釣魚()12     {13         System.out.println("釣魚");14     }15 }16 17 class 畢老師 extends 畢姥爺18 {19     void 講課()20     {21         System.out.println("Java");22     }23     void 看電影()24     {25         System.out.println("看電影");26     }27 }28 29 30 31 32 33 class  DuoTaiDemo234 {35     public static void main(String[] args) 36     {   //原來37 //        畢老師 x = new 畢老師();38 //        x.講課();39 //        x.看電影();40      //多態41         畢姥爺 x = new 畢老師();42         x.講課(); //這裡講的是Java的內容,Java把管理學覆蓋了 43         x.釣魚();44 45         畢老師 y = (畢老師)x;//ClassCastException46         y.看電影();47 48 49 50 51     }52 }

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.