Java基礎學習-- 繼承 的簡單總結
程式碼參考:Java基礎學習小記--多態
為什麼要引入繼承?
還是做一個媒體庫,裡面可以放CD,可以放DVD。如果把CD和DVD做成兩個沒有聯繫的類別的話,那麼在管理這個媒體庫的時候,要單獨做一個添加CD的函數,單獨做一個添加DVD的函數,如果還要往這個媒體庫裡添加其他的媒體類,還要再建立另一個添加函數。我們說這樣的程式碼不具備可擴充性。另外,CD和DVD有很多相似之處,它們的成員變數裡都有標題,播放時長,評論,等等,我們稱這樣的程式存在大量的程式碼複製,程式碼複製是程式碼不良的表現。所以我們可以創建一個它們的父類,把他們相同的成員變量都添加進父類,而它們都可以繼承得到這些變量,在添加到媒體庫的時候僅僅需要創建一個添加它們父類的這麼一個函數,它們便也可加進去。
子類別從父類別繼承得到了什麼?
繼承得到了父類別所有的東西,包括成員變數和成員函數。但不見得能夠存取父類別的所有東西,這樣看父類別所繼承下來的成員變數和成員函數的存取屬性。如果父類別裡有成員變數是private的,那麼子類別是不可以直接存取的。但是,private只有父類別自己可以訪問,所以我們可以在子類別裡透過呼叫父類別的public函數來間接的存取這些成員變數。
另外,子類別除了有從父類別那裡繼承得到的之外,還可以有自己的獨有的成員變數和函數,寫在自己的類別裡面。
訪問屬性
訪問屬性 含義
public 對所有人開放
private 缺省 只有自己和包內其他類別可以訪問
super();
在父類的構造函數中構造過的成員變量,子類的構造函數的參數表裡要寫明,並且用super()將這些在父類那裡構造過的成員變數從父類別取過來。實例程式碼請看多態那篇博文。
super();裡面的參數會決定呼叫父類別裡的哪個建構器,super();裡面的參數和所呼叫的建構器的參數是相同的。
缺省模式下(如果子類別建構器裡沒有super();),會預設呼叫父類別裡沒有參數的建構器,如果父類別裡沒有這樣的建構器,eclipse會報錯。
覆蓋(override)
當子類別和父類別裡有相同名稱的函數時,子類別裡的函數會去覆蓋(override)從父類別那裡繼承來的那個同名函數,於是從父類別來的那個函數就會藏起來不起作用。但是如果想在子類別中呼叫父類別中的那個同名函數,應寫成 super.函數名稱(); 。
<br/>