急:父类构造方法调用本类和子类同名方法时所产生问题
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
结束子类构造函数
----------------------
我想问一下上边和下边的运行上的差别,为什么在父类调用相同的名字时,第一次是调用子类的方法,第二次确是父类的,不要回答因为第二次是私有的不能被子类继承,这我知道,我是要原理上解释。我想知道当子类对象实例化时所调用的父类对象是以什么样的形式、顺序,我的理解是子类调用父类构造函数时所调用的方法应该是父类的,但结果却调用了子类重写的方法...这到底是为什么????
------解决方案--------------------沙发...
------解决方案--------------------第一次是方法重写吧~~