[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 !!
Access Modifiers 實驗1
Access Modifiers 實驗2
再來看static 的影響:
Access Modifiers 實驗3
static method 沒有 override !!!
static method沒有override!
繼承是一個 Is a 關係 不是 has a 關係!
getClass()方法
會回傳那個物件的type給你看!!
instanceof 是在問你是不是?
例如問:同學你是不是哺乳類:回答是
getClass() 的問法則是問:告訴我你是哪一類:那我會回答人類,不會說是哺乳類
任何的Object都是Object這個Class的instance,因為整個hierarchy的最上層就是Object!!
箭頭指向往上(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裡面 |
前面四個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!!
留言
張貼留言