java語言中的多態概述

來源:互聯網
上載者:User

標籤:java   多態   

多態:一個對象對應著不同類型

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

 

多態的好處:

提高了代碼的擴充性,前期定義的代碼可以使用後期的內容。

多態的弊端:

         前期定義的內容不能使用後期子類中定義的特有內容。

 

多態的前提:

1,必須有關係,(繼承,實現)。

2,要有覆蓋。


Animal a =new Cat();

自動型別提升,貓對象提升了動物類型。但是特有功能無法訪問。可以限制對特有功能的訪問。專業講:向上轉型。將子類型隱藏,就不能使用子類的特有方法。

如果還想用具體動物貓的特有功能,可以將該對象進行向下轉型。目的是為了使用子類中的特有方法。

Cat c = (Cat)  a;

注意:對於轉型,自始至終都是子類對象在做著類型的變化。

if (a instanceof Cat){Cat c=(Cat)  a;}


instanceof:用於判斷對象的具體類型(類或是介面),只能用於引用資料類型判斷。

通常在向下轉型前用於健壯性的判斷。

 

多態時,成員的特點:

1,成員變數

編譯時間:參考引用型變數所述的類中是否有調用的成員變數,有,編譯通過,沒有編譯失敗。

運行時:參考引用型變數所述的類中是否有調用的成員變數,並運行該所屬類中的成員變數。

簡單說:編譯和運行都參考等號左邊。

2,成員函數(重點)非靜態

編譯時間:參考引用型變數所述的類中是否有調用的成員函數,有,編譯通過,沒有編譯失敗。

運行時:參考的是對象所述的類中是否有調用的函數。動態綁定

簡單說:編譯看左邊,運行看右邊。

例子:

class Outer {void method(){Object obj =new Object(){public void show(){System.out.println("show run");}};obj.show();//錯誤提示,找不到符號//因為匿名內部類這個子類對象被向上轉型成了Object類型。這樣就不能再使用子類的特有方法了}}class InnerClass{public static void main(String [] args){new Outer().method();}}

3,靜態函數

編譯時間:參考引用型變數所述的類中是否有調用的靜態方法,有,編譯通過,沒有編譯失敗。

運行時:參考引用型變數所述的類中是否有調用的靜態方法。

簡單說:編譯和運行都看左邊。

 

其實對於靜態方法,是不需要對象的,直接用類名調用即可。








java語言中的多態概述

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.