其實我的疑問很簡單
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 的繼承與否當成獨立事件
: :