Java -5 繼承和多態(子類繼承父類、方法的覆蓋和變量的隱藏)


子類繼承父類

  • “繼承‘是面向對象最顯著的一個特性。
  • 一個子類繼承父類,這個子類就會自動獲得了父類中定義的成員變量和成員方法,同時,這個子類也可以定義新的成員變量和成員方法。
  • 父類又稱為超類或基類,子類又稱為派生類。通過子類繼承父類,使得復用父類的代碼變得非常容易,能夠大大縮短開發周期,降低開發費用。

下圖用UML圖體現類之間的繼承關系,圖中子類用空心三角箭頭指向父類。

 

 Java語言只支持單繼承,不支持多繼承,B類繼承A類的語法如下:

 

 繼承的語法機制:

  • Java虛擬機在裝載一個子類之前,必須先裝載它的父類。
  • 因為一個子類對象肯定要擁有父類對象的屬性,所以在一個子類對象數據中是包含一個父類對象數據的。那么在創建初始化一個子類對象時,就必須要先創建初始化一個父類對象。所以在調用子類構造方法時,肯定會先調用父類的構造方法,以初始化這個子類對象里的父類對象。
  • 父類的構造方法是不能被子類繼承的,但是子類的構造方法中可以調用、也必須調用父類的構造方法。
  • 如果在子類的構造方法中需要顯式調用父類的構造方法,那么就要在子類構造方法中的第一行,使用語句“super(實參列表)”來調用父類的構造方法。
  • 如果在子類的構造方法中沒有顯式調用父類的構造方法,則編譯器會自動在子類構造方法中的第一行,添加調用父類無參構造方法的語句“super()”,如果此時父類沒有定義無參的構造方法,則會出現編譯錯誤。

 

方法的覆蓋和變量的隱藏

  • 如果一個子類對繼承自父類的某個方法的實現“不滿意” ,子類可以重新實現這個方法。這種語法機制稱為“方法的覆蓋”(Override)
  • 與方法的覆蓋 類似的語法機制是 變量的隱藏 。所謂變量的隱藏 是指:在子類中可以定義父類中以及定義的成員變量,或者說,可以定義和父類成員變量同名的成員變量,此時子類的成員變量同名的成員變量隱藏了父類的成員變量。

 

方法的覆蓋需要注意以下幾點:

  • 子類重新實現的方法必須和父類中被覆蓋的方法具有完全一致的:方法名、參數列表和放回值類型,否則就不能稱為方法的覆蓋。
  • 在子類的方法中,可以通過語句“super.方法名”,來顯式調用父類中被覆蓋的方法。
  • 子類不能覆蓋父類中用“static”、“private”或者“final" 修飾符修飾的方法。
  • 只有當一個子類能夠訪問父類的某個方法時,父類的這個方法才能被子類覆蓋。

 

案例

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM