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