Re: [問題] private繼承問題
※ 引述《kiwatami (悠游自在)》之銘言:
我想我對繼承的理解跟你是比較接近的。
我自己是從2個事實與幾個經驗去理解繼承:
1. 繼承的時候,sub class會從super class 既有的member context上再去疊加
自己的東西。
2. sub class 要存取super class的東西得通過修飾判定,標為private的不給用。
我的經驗:
1. 以前為了寫一個light weight container 的東西,所以得根據annotation
runtime改POJO的private member field。
2. 曾經為了對付一個我動不了src的第三方程式庫裡的bug,reflection下去dirty patch
3. 玩 java iunstrumentation,偷改class定義套proxy做我自己的事情。
4. IDE Debugger 要追狀態是不是正確的時候
也就是『繼承』這個名詞的解釋,可以是從什麼觀點看過去的問題。
從物件導向的角度去看『繼承』這個字詞的定義:
看不見、不能用的就是沒有『繼承』到,所以沒有繼承。
回到super class 的private a1,sub class 雖然繼承了super class,但sub class
並沒有繼承a1。
a1是super class的,sub class 呼叫getA1()的時候,是透過getA1()這個跟
super class 繼承來的方法存取super class所持有的a1。
從記憶體使用、資料結構的角度(簡單說就是把『封裝』的概念丟掉)去看super class
、sub class的關係:
runtime 的時候debugger 開起來,這個sub class我就是有看到super class的 member
field啊。不過是『標記』為『private』而已,我真想用、硬改還不是一樣可以?
不曉得這樣有沒有回答到?
--
生命起源於簡單的化學反應,靈魂是腦神經上頭的火花。
掌紋沒有含意,不過是具有止滑功用的紋路。
而神不存在,死去的人們只是等待細菌分解的腐肉而已。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.193.164.59
※ 文章網址: http://www.ptt.cc/bbs/java/M.1406089401.A.ACF.html
推
07/23 14:43, , 1F
07/23 14:43, 1F
推
07/25 20:51, , 2F
07/25 20:51, 2F
討論串 (同標題文章)
完整討論串 (本文為第 16 之 17 篇):