[转载]网上找的一个98%的人都会出错的问题!!
public class Parent
{
public void test()
{
}
public Parent()
{
test();
}
public static void main(String[] args)
{
new Child();
}
}
class Child extends Parent
{
private int instanceValue = 20;
public void test()
{
System.out.println("instance value is: " + instanceValue);
}
}
各位先猜猜打印的结果是多少呢?为什么呢?
搜索更多相关的解决方案:
都会
----------------解决方案--------------------------------------------------------
打印劫果等于0;
在main方法中new Child()首先构造父类的构造函数,因为父类中构造有调用test()方法,而子类中覆盖了test()方法,实际调用的是子类中的方法(因为是子类中的实例),但是父类中没有instanceValue,所以默认会使instanceValue=0;(Java虚拟机的规定),结果就不言而喻了!
一般的规律:
在多态中,子类中的实例调用方法时师子类中声明的方法,而变量这是调用父类中的!
----------------解决方案--------------------------------------------------------
是不是编译class Child时先编译int instanceValue,默认为0,再编译test()方法,执行时先执行test(),再给instanceValue赋值为20
----------------解决方案--------------------------------------------------------
嗯,差不多!
----------------解决方案--------------------------------------------------------