[Java] Absolute Java (5E) Ch 7 (1)

Overview - Define inheritance, polymorphism, overloading, overriding,

and virtual method invocation

1. 為何需要繼承 inheritance ?
看看下面的兩個class

其實 Employee 跟 Manager 只差一個欄位,就要把所有code的method重寫一遍,很麻煩,要可以重複再利用會方便很多,所以出現了Inheritance的概念。

繼承的人只需要寫多出來的東西就可以!
Java 的繼承用 extends 這個關鍵字

單一繼承,只繼承來自一個人
多重繼承,像是我就同時繼承來自兩個人 (父母)


IS-A relationship
所謂 is a:"是其中一種" 的概念
所以Manager 繼承 Employee 其實 Manager is a Employee 也是成立的

Extend 延伸關係,擴充的概念,越下方的地方需要被定義的屬性就越多


圖書館,PTT,選課:沒有Extend延伸關係

生物,族譜,(遊戲) 技能轉職,貨品分類

例1:
圓錐曲線 橢圓 圓 雙曲線 拋物線

圓錐曲線 --  橢圓  -- 圓
|              |      
雙曲線    拋物線

上面的hierarchy是以IS-A的概念畫出的

例2:
實數 -- 有理數 -- 整數

這也是以IS-A的概念畫出的

回到圖例:
Employee <-- Manager <-- Director
這是用 Extend 的概念畫出來的
越上層的類別,所能夠包含的物件種類越多,所以共通屬性越少
越下層的類別,所能夠包含的物件種類越少,所以共通屬性越多

在這概念之下: 圓(半徑) <-- 橢圓(長軸,短軸)
因為橢圓要知道長軸短軸,屬性較多
而圓只需要知道半徑就好,屬性較少

但其實 擴充自 橢圓 限制條件擴充:長軸 = 短軸
所以應該寫成這樣 橢圓 <-- 圓(加上擴充條件)


針對擴充的東西,要使用原來的function可能會更有限制,
所以要把一些原先繼承來的方法(function)來Override 成更有限制的版本

Protected 是讓有繼承他的人才看得到
getDetails() 原本的Employee版本在Manager Class當中不夠用了
所以把原本的Method給override掉!
這裡的name salary birthDate是private的,所以不能直接看到,
必須call 到 parent 的 method getDetails 才有辦法得到
在child裡面要call parent的method就用super的關鍵字

Polymorphism

Employee type的 reference 可以指向 Manager 的物件
因為 Manager 是一種 Employee,
反之 Manager type 的 reference 不能指向 Employee 物件!
因為 Employee 不一定是 Manager


實際操作:



如果把A裡面的 x 改成 private 則需要有getter setter


A type的 reference 可以指的到 B
parent 的 reference 可以指向他被繼承的所有child 物件 !!



因為Y 是 X 的 subclass 所以,這裡的B是A的child,B override 的 m2()只能return 比原本A type m2() return X 還要同等層級X或是後面層級的subclass Y

例如:台大規定超過128學分畢業
台大資管系override掉學校的規定超過132學分畢業





Overide v.s. Overloading

Overload: 同一個Class對於一個function寫很多種不同parameter與return type的版本

Override:不同Class之間,同一個function,傳進的參數也相同情形下,return做的事情不一樣。


這裡的m4不是override 因為參數不一樣了!是overload!!

final
final 放在函數前面,代表這個函數不能再被override!!
final 放在變數前面,代表這個變數值不能再被改
final 放在Class前面,代表這個Class不能再被繼承!


觀念:Constructor 不能被繼承!













留言

這個網誌中的熱門文章

[筆記] CRLF跟LF之區別 --- 隱形的 bug

[ML筆記] Batch Normalization

[筆記] 統計實習(1) SAS 基礎用法 (匯入資料並另存SAS新檔,SUBSTR,計算總和與平均,BMI)

[ML筆記] Ensemble - Bagging, Boosting & Stacking