日期:2014-05-20  浏览次数:20813 次

怪问题
public   class   ff   {

public   ff()   {
//   TODO   Auto-generated   constructor   stub
}

/**
  *   @param   args
  */
public   static   void   main(String[]   args)   {
new   clss();
new   son();
}

}
class   son   extends   father{
  int   x   =   100;

public   son()   {
super();
}
public   void   dothing()
{
System.out.println(x);
}
}
class   father
{
public   void   dothing()
{

}
public   father()
{
dothing();
}
}

class   clss
{
int   x   =   100;
public   clss()
{
System.out.println(x);
}
}


大家觉得打印出来值是多少
100
0

为什么第二个把值取不出来啊

------解决方案--------------------
没搞清楚初始化顺序
------解决方案--------------------
真是很奇怪啊

------解决方案--------------------
第二个是在类的方法里面,不在初始化的过程中,所以没调用
------解决方案--------------------
new son(); 这句首先是调用了new father();调用dothing()方法由于son这个类重写了这个方法,因此调用son类里面的这个dothing()既是:
public void dothing()
{
System.out.println(x);
} //此时还没走到x的初始化语句因此x是默认值0。如果x是字符类型的话就是null了
------解决方案--------------------
初始化问题