思维有限,不知道该如何解决,有那位大侠给解释一下,下面代码的运行结果为什么这么奇怪?
public class Parent
{
public void test(){
}
public Parent(int c){
System.out.println( "this hava attribue is run. ");
}
public Parent(){
test();
}
}
class Child extends Parent
{
public int instanceValue = 20;
public Child(int c){
}
public void test(){
System.out.println( "instance value is: " + instanceValue);
}
public static void main(String[] args){
new Child(1);
}
}
------解决方案--------------------我也刚学,说错了你们指出来.
运行时,父类的构造函数有先,父类里面调用了test()这个方法,因为子类重载他了,所以他不走父类的那个方法,直接走子类的.父类中没有这个instanceValue,所以运行时默认为0,
------解决方案--------------------this hava attribue is run
每次对子类实例化时候 ,现调用父类的构造函数 ,那么根据参数判断首先是有上面那个语句输出;
然后调用子类的构造函数,由于没有做任何事情 所以无输出