繼承,從世俗的角度來解釋便是子女得到父輩的財(cái)產(chǎn)或物品。程序中,繼承是指兩個(gè)類的從屬關(guān)系,它可以使多種事物之間形成一種關(guān)系體系。例如貴賓和泰迪都是屬于寵物犬,程序中便可以描述為貴賓和泰迪繼承自動物。這篇要文章主要理清三個(gè)問題:
- 繼承的概念是什么?
- 繼承中如何重寫父類的方法?
- 關(guān)鍵字super如何使用?
先看第一個(gè)問題,在Java中類的繼承是指在一個(gè)現(xiàn)有類的基礎(chǔ)上去構(gòu)建一個(gè)新的類,構(gòu)建出來的類被稱作子類,現(xiàn)有的類被稱作父類,子類會自動擁有父類所有課繼承的屬性和方法。同時(shí),程序中通常用extends關(guān)鍵字來聲明一個(gè)繼承另一個(gè)類,下面就通過一個(gè)案例來演示:
上面代碼的運(yùn)行結(jié)果是“動物的叫聲”和“我的名字叫貴賓”。其中Dog類通過extends繼承了Animal類,這樣Dog類便是Animal類的子類。從運(yùn)行結(jié)果可以看出,子類雖然沒有定義name屬性和shout方法,但是卻能訪問這兩個(gè)成員,這也就說明了子類在繼承父類的時(shí)候,會自動擁有父類的所有成員。但也有一些問題需要注意下:
- Java中,類只支持單繼承不允許多重繼承,也就是說一個(gè)類只能有一個(gè)父類。
- 多個(gè)類可以繼承同一個(gè)父類。
- 可以多層繼承,即一個(gè)類的父類可以去繼承另外的父類。
- Java中的子列和父類只是一種相對概念。
接下來看第二個(gè)問題,繼承中重寫父類方法是怎么回事。
我們知道繼承關(guān)系中,子類會自動繼承父類中定義的方法,但有時(shí)在子類需要對繼承的方法進(jìn)行修改,即重寫父類方法。好比父親的理想,如果兒子不喜歡,可以去追求自己的夢想。
上面代碼中,Dog類繼承了Animal類中的shout方法,調(diào)用時(shí)會打印“動物的叫聲”,這明顯不是描述一種具體動物的叫聲,Dog發(fā)出的叫聲應(yīng)該是“汪汪汪。。?!睘榱私鉀Q這個(gè)問題,可以在Dog類中重寫父類Animal的shout()方法,具體代碼如下:
運(yùn)行結(jié)果是“汪汪汪。。?!薄倪\(yùn)行結(jié)果可以看到,在調(diào)用Dog類對象的shout方法是,只會調(diào)用子類重寫后的方法。
最后來看第三個(gè)問題,如何正確使用super關(guān)鍵字?
從上一個(gè)代碼中可以看到,當(dāng)子類重寫父類的方法后,子類對象將無法訪問父類被重寫的方法,為了解決這個(gè)問題,Java中專門提供一個(gè)super關(guān)鍵字用于訪問父類的成員。super的作用主要體現(xiàn)在兩個(gè)方面:
- 使用super關(guān)鍵字調(diào)用父類的成員變量和方法,格式如下
super.成員變量;
super.成員方法({參數(shù)1,參數(shù)2...}); - 使用super關(guān)鍵字調(diào)用父類構(gòu)造方法,格式如下
super.({參數(shù)1,參數(shù)2...});