Re: [問題] private繼承問題

作者: kiwatami (悠游自在)   2014-07-20 12:24:17
其實我的疑問很簡單
public Class Parent{
private Foo foo;
private Bar bar;
public Foo getFoo(){
return foo;
}
public Bar getBar(){
return bar;
}
}
public Class Child extends Parent{
public void doSomething(){
Foo foo = this.getFoo();
}
private void doAnother(){
Bar bar = this.getBar();
}
}
public Class Arrangement{
public void init(){
Child child = new Child();
child.doSomething();
}
}
在doSomething中的getFoo();
是從哪裡取得Foo這個物件的?
而Foo這個物件在這種情況下是存在於哪一個類別?
實作上的確會存在一個父類別的物件
而Foo及其getter也的確存在於父類別內而不是在子類別內
以下都是從定義上來闡述非實作上的真正行為
拿到繼承這方面講
定義上寫著Child繼承了Parent的getFoo()
但卻沒有繼承Parent的Foo
所以定義上的流程應該是:
call getFoo() from Child -> return foo from Parent
or
call getFoo() from Parent -> return foo from Parent
如果是前者 不是非常奇怪嗎?
沒有繼承foo 要從哪裡跟Parent拿foo?
如果是後者 又何必用到"繼承"這兩個字?
只是開放存取權限而已 全部都是從Parent存取
如果只是為了extends去強加解釋
那我認為一開始就直接用"擴充/擴展"會更容易理解
畢竟這也是我們用extends的目的
不知道各位能不能用自己的說法而不是官方文件
為小弟妹歐吉巴桑解惑一番?
以下是題外話
今天有一個人提出他對定義的看法
就表示不會只有他一個人這樣想
像其他回文的板友一樣
越多人提出自己的看法 有各種相同/不同的論點
整個討論串的完整性就越高
但如果論點都只是你不該這樣想、請你接受或是官方文件就這樣說
那跟我們台灣人所受的教育有何不同?
都只是強迫的填鴨式教育罷了
從小老師的教學都是我們不能有自己的想法
不能用自己的想法去解題
就算答案對了 老師也不會解釋過程有甚麼錯誤
而是回答 "因為課本不是這樣教"
我覺得這才是真正應該改變的想法
※ 引述《sbrhsieh (十年一夢)》之銘言:
: ※ 引述《qrtt1 (有些事,有時候。。。)》之銘言:
: : 標題: Re: [問題] private繼承問題
: : 時間: Wed Jul 16 09:49:27 2014
: : ............................................... 43
: : → kiwatami:官方文件有說我就不能問嗎= =? 怎麼感覺你很不想我發言 07/15 22:08
: : → Chikei:因為你一直在"你的想法"、"你覺得",這邊是Java版我們在討 07/15 22:59
: : → Chikei:論的是Java,那當然所有不清楚的名詞最終都以JLS為標準 07/15 22:59
: : → Chikei:現在JLS直接說明了private field就是不會被繼承,或者說這 07/15 23:00
: : → Chikei:就是Java the Language的"繼承"定義,你再覺得不合理也請接 07/15 23:00
: : → Chikei:受,因為我們是在討論Java語言。 07/15 23:01
: : → Chikei:當然要來大戰Java定義的繼承跟一般programmer談到繼承時候 07/15 23:08
: : → Chikei:的心靈模型一不一樣不是不可,但很明顯跟原po的問題無關 07/15 23:09
: : → TonyQ:其實我覺得都可以討論啦 就是對語意瞭解不一致而已XD 07/16 06:21
: : → TonyQ:也沒有人說不能/不想發言,原 po 多心了~ XD 07/16 06:22
: : → kiwatami:不好意思 從小到大我覺得不合理的都不會接受... 沒有要吵 07/16 08:58
: : → kiwatami:架的意思啦 只是覺得好像講出自己的想法反而不行的感覺 07/16 08:58
: : http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.2
: : Members of a class that are declared private are
: : not inherited by subclasses of that class.
: : 目前問題的關鍵在於 kiwatami 版友
: : 沒有把 field 與 method 的繼承視為獨立事件。
: : Members of a class 可以是 field 或 method,
: : 版上已經接受規格定義的人,是將這二種 member 的繼承與否當成獨立事件
: :
作者: luoqr (.....)   2014-07-20 12:42:00
new Child時會順便建構Father, 存取foo變數是跟father拿Father給的只有getFoo()並非變數本身不過實際上JVM會怎麼分配記憶體 那就要看怎麼實作JVM了?你可用其它方式解讀"定義" 並無人限制你 只是溝通上方便而已你可以做一個真的會把變數繼承給子類別的VM 也可以不要這樣只要滿足繼承的條件就好
作者: pzyc79   2014-07-20 20:44:00
擴充感覺比較符合實際 繼承好像獨立出來的感覺
作者: luoqr (.....)   2014-07-20 22:59:00
實際上英文也是用extends而非inherit XD
作者: antiquerefer (antique refer)   2014-07-20 23:52:00
看來你不適合走這行 在軟體裡定義與介面是十分重要的雖然你可以使用實作觀點去理解定義但不代表了解定義本身是不好的也不覺得那些回您定義的人是填鴨式教育反而覺得您是obstinate audience了解定義 -> 為什麼這樣定義(優缺) -> 定義的特性
作者: sbrhsieh (十年一夢)   2014-07-21 00:37:00
請問到目前為止,哪些回文/推文有在討論為什麼如此定義?
作者: antiquerefer (antique refer)   2014-07-21 04:25:00
因為連第一步都做不到了 何來第二步沒有共識 就想要討論具體? 先朝野協商吧
作者: Killercat (殺人貓™)   2014-07-21 06:13:00
很早很早很早以前是稱為Father, 不過不知道是不是性別議題的關係,很早以前就改稱Parent了 :P
作者: Kennyq (舞光十射~*)   2014-07-21 12:24:00
推l大 => 實際上英文也是用extends而非inherit
作者: AmosYang (泛用人型編碼器)   2014-07-21 13:47:00
以前許多設計架構裡也是用 master/slave 等字,現在也是改用 parent/child 了 :D
作者: Killercat (殺人貓™)   2014-07-21 14:48:00
IDE太早夭 不然應該也會被靠杯 XD
作者: sbrhsieh (十年一夢)   2014-07-21 15:51:00
就是沒有共識才要討論啊~擺什麼架子
作者: gmoz ( This can't do that. )   2014-07-21 15:53:00
感覺像是文字遊戲
作者: TonyQ (自立而後立人。)   2014-07-21 16:31:00
我認為是後者~從定義面來講變數繼承與否就是能存取與否而已
作者: danny8376 (釣到一隻猴子@_@)   2014-07-21 19:59:00
為何這樣定義? 你知道spec先要出來語言才會實做出來嗎
作者: Eryngium (千夜一夢)   2014-07-22 08:48:00
推!!有些人根本想都沒想過你的問題就狂否定

Links booklink

Contact Us: admin [ a t ] ucptt.com