返回信息流有一下两个类:
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,这究竟是一种什么机制呢
这是一条镜像帖。来源:北邮人论坛 / java / #26691同步于 2013/8/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
求大神分析输出结果为何是这样
Ada2011
2013/8/26镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
new一个对象的时候
1.先构造父类对象,调用BaseClass默认的空的构造方法
2.再构造子类对象,调用了父类中的baseMethod方法。实际作为ExtendClass对象,必然会调用ExtendClass中定义的MethodTobeCalled方法。(如果ExtendClass中没有定义MethodTobeCalled方法,自然会去父类中寻找,如果父类中也没有则会编译报错)
感谢大神的详细解答~~
【 在 dinglei8908 的大作中提到: 】
: new一个对象的时候
: 1.先构造父类对象,调用BaseClass默认的空的构造方法
: 2.再构造子类对象,调用了父类中的baseMethod方法。实际作为ExtendClass对象,必然会调用ExtendClass中定义的MethodTobeCalled方法。(如果ExtendClass中没有定义MethodTobeCalled方法,自然会去父类中寻找,如果父类中也没有则会编译报错)
【 在 Ada2011 的大作中提到: 】
: 有一下两个类:
: public class BaseClass {
: public void baseMethod(){
: ...................
2011的妹子么?
掉进了jvm这个黑洞么?
想问下:一个文件中为什么可以定义两个public的类
【 在 Ada2011 的大作中提到: 】
: 有一下两个类:
: public class BaseClass {
: public void baseMethod(){
: ...................
java编程思想第四版,第八章多态,8.3.3构造器方法中多态的行为 中有介绍。
public void baseMethod(){
System.out.println(this.getClass);//看看这个对象的类型,在想想呗!
MethodTobeCalled();
}