2020-03-09多態(tài)

1.多態(tài)的體現(xiàn)

父類 對象名 = new 子類();

func(父類 子類對象){}

父類的引用指向了自己的子類對象;

父類的引用可以接受自己的子類對象。

2.多態(tài)的前提

必須是類與類之間有extends/implements關(guān)系。

還有一個前提,子類對父類的成員存在覆蓋

3.多態(tài)的特點

提高了程序的擴展性,但只能使用父類的引用訪問父類的成員

4.多態(tài)的應(yīng)用



類型提升(向上轉(zhuǎn)型):子類提升為父類。父類引用指向子類對象。Animal a = new Cat();

想調(diào)用子類的方法時,需要向下轉(zhuǎn)型(強制將父類的引用轉(zhuǎn)成子類類型)。Cat c = (Cat)a,? ? c.方法? 實現(xiàn)調(diào)用

不可以將父類對象轉(zhuǎn)成子類類型的引用。多態(tài)始終都是子類對象在做著變化。


但是如果向帶有父類引用參數(shù)的方法中傳入其他子類對象,雖然編譯通過但是運行會出錯(類型轉(zhuǎn)換異常)。因此可以使用引用數(shù)據(jù)類型之間的判斷(引用變量 instanceof 類型),從而使用特定子類類型進行指定操作

例如傳入Animal a,則判斷是if(a instanceof Cat)


多態(tài)中非靜態(tài)成員的函數(shù)

編譯時:參閱引用型變量所屬的類中是否有需要調(diào)用的方法,如果有,編譯通過,如果類中沒有需要調(diào)用的方法則編譯失敗。

運行時:參閱對象所屬的類中是否有需要調(diào)用的方法。

編譯看左邊,運行看右邊

注意:多態(tài)中,成員變量的特點。無論編譯和運行,變量的值都參考左邊(引用變量所屬類)。多態(tài)中,靜態(tài)成員函數(shù)無論編譯和運行都參考左邊(這是因為靜態(tài)比對象先加載,靜態(tài)綁定,等于類名.成員,而動態(tài)的是this.)。


舉例:主板、多態(tài)

實現(xiàn):插入網(wǎng)卡時調(diào)用網(wǎng)卡的功能,插入聲卡時調(diào)用聲卡的功能,即插即用

步驟:

定義一個PCI接口,使得網(wǎng)卡、聲卡等類implementsPCI,在調(diào)用的時候有PCI p = new 網(wǎng)卡();傳入一個PIC型的引用變量,相當于父類引用子類對象,子類對接口的功能進行復(fù)寫,從而對子類的方法進行調(diào)用。

舉例:數(shù)據(jù)庫提高擴展性

步驟:連接數(shù)據(jù)庫,操作數(shù)據(jù)庫(c r u d),關(guān)閉數(shù)據(jù)庫連接

定義了接口,包含抽象方法add,delete,子類實現(xiàn)了接口的方法,調(diào)用時使用多態(tài),使主程序調(diào)用重寫后的子類方法,每當我們需要用到新的數(shù)據(jù)庫類型時,只需要讓新子類實現(xiàn)接口,然后作為子類調(diào)用即可


Object類:是所有對象的直接后者間接父親,定義了所有對象都具備的功能。

所有的對象都能比較。equals()方法比較地址值,只要是Object都能比較,因此不管對象是什么類,都是Object的子類,都是多態(tài)。

通過向下轉(zhuǎn)型,對equals方法進行重寫,如果要用到對象的屬性,需要進行類型轉(zhuǎn)換和判斷。如果是不同的類進行比較,則通過instanceof判斷直接返回false。

toString():返回對象的字符串表示

hashCode():返回對象的哈希值

getClass()

getMethod():連private都能獲取

getName()

這些都沒有意義,可以在類中根據(jù)需要進行復(fù)寫


內(nèi)部類

內(nèi)部類可以直接訪問外部類的成員,包括private

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學習記錄文檔,今天18年5月份再次想寫文章,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 3,144評論 2 9
  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法,可以作為本類的靜態(tài)方法來...
    XLsn0w閱讀 1,428評論 0 2
  • 父類與子類 在Java術(shù)語中,如果C1類擴展自另一個類C2,我們稱C2為父類,也稱超類或基類,稱C1為子類,也稱次...
    Steven1997閱讀 1,323評論 1 2
  • 面向?qū)ο笾饕槍γ嫦蜻^程。 面向過程的基本單元是函數(shù)。 什么是對象:EVERYTHING IS OBJECT(萬物...
    sinpi閱讀 1,220評論 0 4
  • 一:java概述:1,JDK:Java Development Kit,java的開發(fā)和運行環(huán)境,java的開發(fā)工...
    ZaneInTheSun閱讀 2,815評論 0 11

友情鏈接更多精彩內(nèi)容