為什麼要引入繼承?
還是做一個媒體庫,裡面可以放CD,可以放DVD。如果把CD和DVD做成兩個沒有聯系的類的話,那麼在管理這個媒體庫的時候,要單獨做一個添加CD的函數,單獨做一個添加DVD的函數,如果還要往這個媒體庫裡添加其他的媒體類,還要再創建另一個添加函數。我們說這樣的代碼不具備可擴展性。另外,CD和DVD有很多相似之處,它們的成員變量裡都有標題,播放時長,評論,等等,我們稱這樣的程序存在大量的代碼復制,代碼復制是代碼不良的表現。所以我們可以創建一個它們的父類,把他們相同的成員變量都添加進父類,而它們都可以繼承得到這些變量,在添加到媒體庫的時候僅僅需要創建一個添加它們父類的這麼一個函數,它們便也可添加進去。
繼承得到了父類所有的東西,包括成員變量和成員函數。但不見得能夠訪問父類的所有東西,這樣看父類所繼承下來的成員變量和成員函數的訪問屬性。如果父類裡有成員變量是private的,那麼子類是不可以直接訪問的。但是,private只有父類自己可以訪問,所以我們可以在子類裡通過調用父類的public函數來間接的訪問這些成員變量。
另外,子類除了有從父類那裡繼承得到的之外,還可以有自己的獨有的成員變量和函數,寫在自己的類裡面。
當子類和父類裡有相同名稱的函數時,子類裡的函數會去覆蓋(override)從父類那裡繼承來的那個同名函數,於是從父類來的那個函數就會隱藏起來不起作用。但是如果想在子類中調用父類中的那個同名函數,應寫成 super.函數名(); 。
代碼參考:Java基礎知識:多態