怪问题
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了
------解决方案--------------------初始化问题