急:父类构造方法调用本类和子类同名方法时所产生问题

bestwu 2007-04-10 11:23:37
package a;

public class A {

/**
* @param args
*/
A(int x){

System.out.println("进入a的构造函数");
run();

}

public void run(){

System.out.println("运行a:run");

}

}

package a;

public class B extends A {

/**
* @param args
*/
B(int x, int y){

super(0);

}

public void run(){

System.out.println("运行b:run");

}

}

package a;

public class C {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int i = 0;
int j = 0;
B object_B = new B(i,j);
}

}

第一次结果:

调用父类构造函数
运行b.run
结束子类构造函数
------------------------
package a;

public class A {

/**
* @param args
*/
A(int x){

System.out.println("进入a的构造函数");
run();

}

public void run(){

System.out.println("运行a:run");

}

}

package a;

public class B extends A {

/**
* @param args
*/
B(int x, int y){

super(0);

}

private void run(){ // 此处为私有的与上边唯一的书写差别

System.out.println("运行b:run");

}

}

package a;

public class C {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int i = 0;
int j = 0;
B object_B = new B(i,j);
}

}
第二次结果:

调用父类构造函数
运行a.run
结束子类构造函数
----------------------
我想问一下上边和下边的运行上的差别,为什么在父类调用相同的名字时,第一次是调用子类的方法,第二次确是父类的,不要回答因为第二次是私有的不能被子类继承,这我知道,我是要原理上解释。我想知道当子类对象实例化时所调用的父类对象是以什么样的形式、顺序,我的理解是子类调用父类构造函数时所调用的方法应该是父类的,但结果却调用了子类重写的方法...这到底是为什么????
...全文
275 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bestwu 2007-04-10
  • 打赏
  • 举报
回复
最好有哪位高手 能把像汇编一样的东西写出来 这样就清晰多了 不会有疑问
bestwu 2007-04-10
  • 打赏
  • 举报
回复
我想知道的是为什么调用重写的方法,我知道是方法重写,我不想知道这样的答案,我想知道他的实际运行原理。。比如:子类对象实例化时调用父类构造方法-〉执行父类构造方法的代码-〉System.out.println("进入a的构造函数");-〉run();。。。关键现在到这了,程序走到这里现在是在父类的构造方法里,他怎么知道这个run方法被子类重写了???我是想知道这背后的东西。。别面的东西我就不问了。。。
li_shiye 2007-04-10
  • 打赏
  • 举报
回复
第一次是方法重写吧~~
scroing 2007-04-10
  • 打赏
  • 举报
回复
沙发...

23,404

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧