当前位置: 代码迷 >> Java相关 >> 输出结果
  详细解决方案

输出结果

热度:437   发布时间:2006-11-12 13:08:00.0
输出结果
public abstract class Exam4 {
Exam4()
{
print();
}
abstract void print();
}

public class Exam4Sub extends Exam4{
int i=1;
void print()
{
System.out.println(i);
}
public static void main(String[] args) {
Exam4Sub e=new Exam4Sub();
e.print();
}
}

为什么打印出来的是
0
1
搜索更多相关的解决方案: 结果  输出  

----------------解决方案--------------------------------------------------------
为什么不 是01
你了解了类的初始化顺序就知道 了
关于初始化的顺序
你可以在本论坛搜索到相关帖子
----------------解决方案--------------------------------------------------------
刚才还有0呢 现在怎么就只有1了啊
你们运行是多少啊
----------------解决方案--------------------------------------------------------
就是01
----------------解决方案--------------------------------------------------------
是不是在创建实例e的时候,默认先调用了父类的构造函数,而父类的构造函数的成员方法在缺省情况下输出的是0,请指教??
----------------解决方案--------------------------------------------------------
父类调用的时候,子类还没有被初始化呢
所以这个时候是0
----------------解决方案--------------------------------------------------------

那我的说法对不对啊??


----------------解决方案--------------------------------------------------------
不是缺省,你要知道print调用的是哪个的 print,其实上调用的是子类的print
子类的print输出i的值,可是这个时候i还没有被初始化,所以输出0了
后来再调用print的时候, i已经初始化了,所以又 输出1了

----------------解决方案--------------------------------------------------------
要是在父类上给他个初始值2,不就输出的是2,1了
----------------解决方案--------------------------------------------------------
父类怎么可能给子类初始值?
笑话
----------------解决方案--------------------------------------------------------
  相关解决方案