Re: [問題] private繼承問題

看板java作者 (十三)時間11年前 (2014/07/20 14:59), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串11/17 (看更多)
※ 引述《kiwatami (悠游自在)》之銘言: : 其實我的疑問很簡單 : 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? 如果你的實作是指runtime而非怎麼實作java這個語言的話, 以下跑Eclipse debugger給你 1.準備getFoo(),按下F5進入 http://bleed1979.myweb.hinet.net/pic1.PNG
2.控制權到Parent,鼠標放在return foo的foo,記住@64482923 http://bleed1979.myweb.hinet.net/pic2.PNG
3.鼠標放在private Foo foo = new Foo();的foo,同樣是@64482923無誤 http://bleed1979.myweb.hinet.net/pic3.PNG
4.按下F7回Child,鼠標放在Foo foo = this.getFoo();的foo,驗證@64482923 http://bleed1979.myweb.hinet.net/pic4.PNG
stackoverflow上面有篇文 http://stackoverflow.com/questions/2486160/java-virtual-methods default Java的methods是virtual的。 -- 不用太管別人怎麼說,就學問討論就行啦~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.135.203.156 ※ 文章網址: http://www.ptt.cc/bbs/java/M.1405839564.A.0D3.html
文章代碼(AID): #1JosZC3J (java)
討論串 (同標題文章)
文章代碼(AID): #1JosZC3J (java)