天天看點

繼承、初始化

通過 ​<code>​extends​</code>​ 關鍵字,可以聲明一個子類繼承另外一個父類,定義格式如下:

代碼示範

父類中的成員,無論是公有(public)還是私有(private),均會被子類繼承。

子類雖會繼承父類私有(private)的成員,但子類不能對繼承的私有成員直接進行通路,可通過繼承的公有方法進行通路。

代碼如下:

如果子類父類中出現不重名的成員變量,這時的通路是沒有影響的。代碼如下:

如果子類父類中出現重名的成員變量,這時的通路是有影響的。代碼如下:

子父類中出現了同名的成員變量時,在子類中需要通路父類中非私有成員變量時,需要使用​<code>​super​</code>​ 關鍵字,修飾父類成員變量,類似于之前學過的 ​<code>​this​</code>​ 。

使用格式:

子類方法需要修改,代碼如下:

小貼士:Fu 類中的成員變量是非私有的,子類中可以直接通路。若Fu 類中的成員變量私有了,子類是不能直接通路的。通常編碼時,我們遵循封裝的原則,使用private修飾成員變量,那麼如何通路父類的私有成員變量呢?對!可以在父類中提供公共的getXxx方法和setXxx方法。

當類之間産生了關系,其中各類中的成員方法,又産生了哪些影響呢?

如果子類父類中出現不重名的成員方法,這時的調用是沒有影響的。對象調用方法時,會先在子類中查找有沒有對應的方法,若子類中存在就會執行子類中的方法,若子類中不存在就會執行父類中相應的方法。代碼如下:

如果子類父類中出現重名的成員方法,這時的通路是一種特殊情況,叫做方法重寫 (Override)。

子類可以根據需要,定義特定于自己的行為。既沿襲了父類的功能名稱,又根據子類的需要重新實作父類方法,進而進行擴充增強。比如新的手機增加來電顯示頭像的功能,代碼如下:

這裡重寫時,用到super.父類成員方法,表示調用父類的成員方法。

1、聲明父類:Person類 包含屬性:姓名,年齡,性别 屬性私有化,get/set 包含getInfo()方法:例如:姓名:張三,年齡:23,性别:男

2、聲明子類:Student類,繼承Person類 新增屬性:score成績 屬性私有化,get/set 包含getInfo()方法:例如:姓名:張三,年齡:23,性别:男,成績:89

3、聲明子類:Teacher類,繼承Person類 新增屬性:salary薪資 屬性私有化,get/set 包含getInfo()方法:例如:姓名:張三,年齡:23,性别:男,薪資:10000