Java的三個大招之二:繼承
繼承,從世俗的角度來解釋便是子女得到父輩的財產或物品。程式中,繼承是指兩個類的從屬關係,它可以使多種事物之間形成一種關係體系。例如貴賓和泰迪都是屬於寵物犬,程式中便可以描述為貴賓和泰迪繼承自動物。這篇要文章主要理清三個問題:
繼承的概念是什麼?
繼承中如何重寫父類的方法?
關鍵字super如何使用?
先看第一個問題,在Java中類的繼承是指在一個現有類的基礎上去構建一個新的類,構建出來的類被稱作子類,現有的類被稱作父類,子類會自動擁有父類所有課繼承的屬性和方法。同時,程式中通常用extends關鍵字來宣告一個繼承另一個類,下面就通過一個案例來演示:

繼承的基本使用.JPG
上面程式碼的執行結果是“動物的叫聲”和“我的名字叫貴賓”。其中Dog類通過extends繼承了Animal類,這樣Dog類便是Animal類的子類。從執行結果可以看出,子類雖然沒有定義name屬性和shout方法,但是卻能訪問這兩個成員,這也就說明了子類在繼承父類的時候,會自動擁有父類的所有成員。但也有一些問題需要注意下:
Java中,類只支援單繼承不允許多重繼承,也就是說一個類只能有一個父類。
多個類可以繼承同一個父類。
可以多層繼承,即一個類的父類可以去繼承另外的父類。
Java中的子列和父類只是一種相對概念。
接下來看第二個問題,繼承中重寫父類方法是怎麼回事。
我們知道繼承關係中,子類會自動繼承父類中定義的方法,但有時在子類需要對繼承的方法進行修改,即重寫父類方法。好比父親的理想,如果兒子不喜歡,可以去追求自己的夢想。
上面程式碼中,Dog類繼承了Animal類中的shout方法,呼叫時會列印“動物的叫聲”,這明顯不是描述一種具體動物的叫聲,Dog發出的叫聲應該是“汪汪汪。。。”為了解決這個問題,可以在Dog類中重寫父類Animal的shout()方法,具體程式碼如下:

繼承中重寫父類方法.JPG
執行結果是“汪汪汪。。。”。從執行結果可以看到,在呼叫Dog類物件的shout方法是,只會呼叫子類重寫後的方法。
最後來看第三個問題,如何正確使用super關鍵字?
從上一個程式碼中可以看到,當子類重寫父類的方法後,子類物件將無法訪問父類被重寫的方法,為了解決這個問題,Java中專門提供一個super關鍵字用於訪問父類的成員。super的作用主要體現在兩個方面:
使用super關鍵字呼叫父類的成員變數和方法,格式如下
super.成員變數;
super.成員方法({引數1,引數2...});
使用super關鍵字呼叫父類構造方法,格式如下
super.({引數1,引數2...});