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

繼承:
箭頭指向往上(parent) 叫做 generalize
箭頭指向往下(child)叫做 specialize

這種關係叫做 extends

override 的 method 比 parent 的限制還要鬆
因為 return 的時候要給原本 parent 的也可以接得住

Encapsulation 與 Inheritance 出現的問題

假設兩的Class A 跟 B
A <--- B

A 是 parent A當中有private method
B可以access A 當中的所有public method
但是B 可以用A當中的一些getter setter找到 A 的 private method

p.s.
constructor 全部都沒有被繼承
因為會自動補super !!

A B C 在同一個package裡面,A被C, D繼承
然後D跟E在別的package裡面
Access Modifiers 實驗1

前面四個v1 ~ v4 沒寫其實是 this.v1 ~ this.v4
所以v4就算是public也不能access
但是如果new一個 A 物件就可以access到除了private之外的人

C繼承A,所以除了private之外都可以直接拿的到!

D也繼承A但是不同package,所以就算繼承了看不到default的v2
有繼承到 v3 跟 v4 ,所以this 直接可以 access 到
有趣的是 下面new 的 A reference無法看到原本 protected 的 v3



Access Modifiers 實驗2
再來看static 的影響:








Access Modifiers 實驗3
static method 沒有 override !!!


結論:static method 不會被override,
所以r2.m1()其實是在call自己的沒有override到parent,
而r3.sm1()則是在call原本的A的

static method沒有override!


繼承是一個 Is a 關係 不是 has a 關係


想要擁有C的特性,但不用繼承,
這裡的寫法是一個has a的概念


getClass()方法
會回傳那個物件的type給你看!!




instanceof 是在問你是不是
例如問:同學你是不是哺乳類:回答是

getClass() 的問法則是問:告訴我你是哪一類:那我會回答人類,不會說是哺乳類


任何的Object都是Object這個Class的instance,因為整個hierarchy的最上層就是Object!!




留言

這個網誌中的熱門文章

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

[ML筆記] Batch Normalization

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

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