歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java基礎知識:繼承 的簡單總結

Java基礎知識:繼承 的簡單總結

日期:2017/3/1 9:10:39   编辑:Linux編程

為什麼要引入繼承?

  還是做一個媒體庫,裡面可以放CD,可以放DVD。如果把CD和DVD做成兩個沒有聯系的類的話,那麼在管理這個媒體庫的時候,要單獨做一個添加CD的函數,單獨做一個添加DVD的函數,如果還要往這個媒體庫裡添加其他的媒體類,還要再創建另一個添加函數。我們說這樣的代碼不具備可擴展性。另外,CD和DVD有很多相似之處,它們的成員變量裡都有標題,播放時長,評論,等等,我們稱這樣的程序存在大量的代碼復制,代碼復制是代碼不良的表現。所以我們可以創建一個它們的父類,把他們相同的成員變量都添加進父類,而它們都可以繼承得到這些變量,在添加到媒體庫的時候僅僅需要創建一個添加它們父類的這麼一個函數,它們便也可添加進去。

  • 子類從父類那裡繼承得到了什麼?

  繼承得到了父類所有的東西,包括成員變量和成員函數。但不見得能夠訪問父類的所有東西,這樣看父類所繼承下來的成員變量和成員函數的訪問屬性。如果父類裡有成員變量是private的,那麼子類是不可以直接訪問的。但是,private只有父類自己可以訪問,所以我們可以在子類裡通過調用父類的public函數來間接的訪問這些成員變量。

  另外,子類除了有從父類那裡繼承得到的之外,還可以有自己的獨有的成員變量和函數,寫在自己的類裡面。

  • 訪問屬性
訪問屬性 含義 public 對所有人開放 private 只有自己可以訪問 protected 只有自己、子類和包內其他類可以訪問 缺省 只有自己和包內其他類可以訪問

  • super();
    • 在父類的構造函數中構造過的成員變量,子類的構造函數的參數表裡要寫明,並且用super()將這些在父類那裡構造過的成員變量從父類那裡取過來。實例代碼請看多態那篇文章。
    • super();裡面的參數會決定調用父類裡的哪個構造器,super();裡面的參數和所調用的構造器的參數是相同的。
    • 缺省模式下(如果子類構造器裡沒有super();),會默認調用父類裡沒有參數的構造器,如果父類裡沒有這樣的構造器,eclipse會報錯。
  • 覆蓋(override)

  當子類和父類裡有相同名稱的函數時,子類裡的函數會去覆蓋(override)從父類那裡繼承來的那個同名函數,於是從父類來的那個函數就會隱藏起來不起作用。但是如果想在子類中調用父類中的那個同名函數,應寫成 super.函數名();

代碼參考:Java基礎知識:多態

Copyright © Linux教程網 All Rights Reserved