class Base
{

public final static int i = 2;
public Base()
{
this.display();
}
public void display()
{
System.out.println("base i"+i);
}
}class Derived extends Base
{
private int i = 22;
public Derived()
{
i = 222;
}
public void display()
{
System.out.println("derived i:"+i);
}

}public class Test
{
public static void main(String [] args)
{
new Derived();
}
}
输出为什么是derived i:0,为什么执行的是子类的display方法,i为什么是0 呢,解释一下执行顺序吧?

解决方案 »

  1.   

    我把你的代码修改了一下,除了为了看的更明白加了几个输出之外,其他效果是一样的(虽然我把赋值放在语句块中了,是为了更好的理解)。如果你看了我的程序结果之后,你应该就明白了为什么你的结果是0了。
    class Base { public final static int i;

    static{
    i = 2;
    System.out.println("Base static");
    } public Base() {
    System.out.println("Base 构造方法");
    this.display();
    } public void display() {
    System.out.println("base i" + i);
    }
    }class Derived extends Base {
    private int i;
    {
    i = 22;
    System.out.println("Derived");
    } public Derived() {
    System.out.println("Derived 构造方法");
    i = 222;
    } public void display() {
    System.out.println("derived i:" + i);
    }
    }public class Test {
    public static void main(String[] args) {
    new Derived();
    }
    }
    输出结果为
    Base static
    Base 构造方法
    derived i:0
    Derived
    Derived 构造方法
      

  2.   

    这个帖子,12L的答复,或许对你有帮助:http://bbs.csdn.net/topics/390538912