谁来帮帮菜鸟
public class A {
/**
* @param args
*/
private String s = "ok ";
A(int x){
System.out.println( "调用父类构造函数 ");
System.out.println( "调用私有成员变量 " + s);
this.run();
}
public void run() {
System.out.println( "运行*父类*run方法 ");
}
}
public class B extends A {
/**
* @param args
*/
B(int x){
super(0);
System.out.println( "子类构造函数初始化完毕 " );
}
public void run() {
System.out.println( "运行*子类*run方法 ");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
B object_B = new B(0);
}
}
运行结果:
调用父类构造函数
调用私有成员变量ok
运行*子类*run方法
子类构造函数初始化完毕
我的问题是:
1.当子类对象实例化过程中通过super(0)显示的调用父类构造方法的时候,父类构造方法所调用的run()方法不是父类的吗?
2.父类构造方法中的run()方法的所属是谁的?子类还是父类?如果是父类的为什么会打印子类中run()方法打印的内容?如果是子类的,那么又是如何做到的?如何将子类对象的引用传进去的?
3.假设在父类中调用的run()方法是子类的引用调用的,那么把父类做下修改:
public class A {
/**
* @param args
*/
private String s = "ok ";
A(int x){
System.out.println( "调用父类构造函数 ");
System.out.println( "调用私有成员变量 " + s);
this.run();
}
private void run() {///////改动为私有成员
System.out.println( "运行*父类*run方法 ");
}
}
那么在这种情况下是不是不会影响到结果,因为既然引用句柄是子类的那么子类的run()方法没有发生变化,就应该不变(本人想法)。但事实是发生了变化
运行结果: