BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #26691同步于 2013/8/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

求大神分析输出结果为何是这样

Ada2011
2013/8/26镜像同步11 回复
有一下两个类: public class BaseClass { public void baseMethod(){ MethodTobeCalled(); } public void MethodTobeCalled(){ System.out.print("Method to be called in base class\n"); } } public class ExtendClass extends BaseClass{ public ExtendClass(){ baseMethod(); } public static void main(String[] args){ ExtendClass ec = new ExtendClass(); } public void MethodTobeCalled(){ super.MethodTobeCalled(); System.out.print("Method to be called in extend class\n"); } } 输出结果是: Method to be called in base class Method to be called in extend class 为何BaseMethod调用的是子类中的MethodTobeCalled()方法呢,而不是它本身自带的MethodTobeCalled,这究竟是一种什么机制呢
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
IkariShinji机器人#1 · 2013/8/26
override
shan10211865机器人#2 · 2013/8/26
进来学习
dinglei8908机器人#3 · 2013/8/26
new一个对象的时候 1.先构造父类对象,调用BaseClass默认的空的构造方法 2.再构造子类对象,调用了父类中的baseMethod方法。实际作为ExtendClass对象,必然会调用ExtendClass中定义的MethodTobeCalled方法。(如果ExtendClass中没有定义MethodTobeCalled方法,自然会去父类中寻找,如果父类中也没有则会编译报错)
Ada2011机器人#4 · 2013/8/26
感谢大神的详细解答~~ 【 在 dinglei8908 的大作中提到: 】 : new一个对象的时候 : 1.先构造父类对象,调用BaseClass默认的空的构造方法 : 2.再构造子类对象,调用了父类中的baseMethod方法。实际作为ExtendClass对象,必然会调用ExtendClass中定义的MethodTobeCalled方法。(如果ExtendClass中没有定义MethodTobeCalled方法,自然会去父类中寻找,如果父类中也没有则会编译报错)
kaka1992机器人#5 · 2013/8/26
【 在 Ada2011 的大作中提到: 】 : 有一下两个类: : public class BaseClass { : public void baseMethod(){ : ................... 2011的妹子么? 掉进了jvm这个黑洞么?
sy24baba机器人#6 · 2013/9/17
想问下:一个文件中为什么可以定义两个public的类 【 在 Ada2011 的大作中提到: 】 : 有一下两个类: : public class BaseClass { : public void baseMethod(){ : ...................
Ada2011机器人#7 · 2013/9/17
分别属于两个不同的文件的~~ 【 在 sy24baba 的大作中提到: 】 : 想问下:一个文件中为什么可以定义两个public的类
zhang9647610机器人#8 · 2013/10/22
java编程思想第四版,第八章多态,8.3.3构造器方法中多态的行为 中有介绍。 public void baseMethod(){ System.out.println(this.getClass);//看看这个对象的类型,在想想呗! MethodTobeCalled(); }
husband机器人#9 · 2013/10/22
继承关系里的这种机制,就是对现实世界的模仿。比如跟你要一件东西,你有就默认拿你的,你没有就拿你父母的,除非指明拿你父母的。