多態性(面經)

在面向對象的設計中,多態主要體現在向不同的對象發送同一個信息,不同的對象在接收時會產生不同的行爲(即方法),對像可以用自己的方法去響應共同的信息。( 多態:在同一個時刻,體現出來的不同狀態)

多態性主要體現在兩個方面:方法重載實現的靜態多態性(編譯時多態)

                                          方法重寫實現的動態多態性(又稱動態連編)

編譯時多態:在編譯階段,具體調用那個被重載的方法,編譯器會根據參數的不同來靜態確定調用的方法。

動態聯編:由於子類繼承了父類的所有屬性(除過私有),所以子類對象可以作爲父類對象的使用,程序中凡是使用父類對象的地方,都可以用子類對象來代替,一個對象可以通過子類的實例來調用子類的方法。

  多態的前提:
   1)必須有繼承關係
   子類繼承父類,存在一些特點
  2)必須有方法重寫
   子類繼承父類,方法重寫的目的,舉例:動物吃的方法,每一個具體動物吃的東西不一樣,所有必須要方法覆蓋
3)就是必須有父類的引用指向子類對象 (向上轉型)
         父類名  fu = new  子類名() ;
                 通過父類對象的創建是通過子類在堆內存新建了了一個對象,由於子類又繼承了父類,父類的引用(初始化)是通過子類新建對象進行的..
 多態中的成員訪問特點:
1)成員變量: 編譯看左,運行看左...
2)成員方法(非靜態): 編譯看左,運行看右(存在方法重寫)
   3)構造方法:構造方法(無論子類,還是父類),都是對對象進行初始化

4)靜態成員方法:     編譯看左,運行看左(靜態跟類有關係,算不上方法重寫)

多態的好處:
可以提供代碼的複用性:繼承保證

可以提高的代碼的擴展性:由多態保證...  (父類的引用指向子類對象)

 多態的弊端:
父類引用指向子類對象,

   通過父類的引用調用子類特有功能,不能調用....

      不能訪問子類特有功能
  Father3 f  = new Son3() ;   父類的引用指向子類對象 (向上轉型)
  
      可不可以將子類的引用指父類的引用呢? (向下轉型)
將父類的引用強制轉換子類的引用

    將父類的引用強制轉換子類的引用  ,向下轉型使用不當,會出現一個異常:屬於運行時期異常:ClassCastException

父類對象和子類對象的轉化需要注意如下原則:

一:子類對象可視爲是其父類的一個對象

二:父類對象不能被當做是其某一個子類的對象

三:如果一個方法定義的是父類對象,那麼調用這個方法時,可以使用子類對象作爲實際參數。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章