Re: [問題] private繼承問題

作者: bleed1979 (十三)   2014-07-20 14:59:19
※ 引述《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的。

Links booklink

Contact Us: admin [ a t ] ucptt.com