为什么两次num的值不一样呢?请赐教,非常感谢哈{:soso_e183:}作者: TK13761 时间: 2013-3-17 21:02
第一次运行程序的时候 Zi z = new Zi(); 调用了Zi(){}空参数的方法 接着super(9);调用了 父类中 Fu(int x)带参数的方法 此时父类中没有 num = 78; 所以 z对象点不出num = 78
第二次运行的时候 Zi z = new Zi(); 调用了Zi(){}空参数的方法 接着super(9);调用了 父类中 Fu(int x)带参数的方法 此时有 num = 78; 所以 对象 z.num = 78
————————————————over-------作者: 杨博 时间: 2013-3-17 21:12
第一次的代码中, Zi z = new Zi();时,先调用子类带参数构造,执行结果fu...9;zi run;
第二行中 Zi z1 = new Zi(3)时,先调用父类空参构造,打印fu...run;zi....3;
最后调用z.num时,由于z没有执行过父类空参构造,所以num为默认值0.
第二个代码中,先执行 Zi z = new Zi();执行super(9),这时,fun...9,并把num赋值为78,再打印zi run;
第二行中 Zi z1 = new Zi(3)时,先调用父类空参构造,打印fu...run;zi....3;
最后打印z.num时,num已为78,所以结果为78.
class Fu
{
int num ;
Fu()
{
System.out.println("fu run");
num = 78;
}
Fu(int x)
{
System.out.println("fu..."+x);
}
}
class Zi extends Fu
{
Zi()
{
super(9);
System.out.println("zi run");
}
Zi(int x)
{
System.out.println("zi...."+x);
}
}
class ExtendsDemo4
{
public static void main(String[] args)
{
Zi z = new Zi(); //执行这条语句的时候他会调用子类的空参数的构造函数Zi(),而Zi()中有调用了父类中的含参的构造函数,所以此时会输出:父....9
// 子...run
Zi z1 = new Zi(3); //执行此语句的时候会调用子类中含参数的构造函数Zi(int x),此构造函数的第一行有一个隐式的父类空参数的构造函数所以会输出:
// 父....run
// 子...3