class Super {
    private int s = 100;    Super() {
        abc();
    }    void abc() {
        System.out.println("s " + s);
    }
}
class Sub extends Super {
    private int s1 = 200;    void abc() {
        System.out.println("s1 " + s1);
    }
        public static void main(String[] args) {
         new Sub();
    }}输出结果是 s1 0 为什么是0.

解决方案 »

  1.   

    首先是初始化父类对象 动态绑定执行子类的abc方法
    这时候还没来得及初始化子类对象的变量
      

  2.   

    楼上2位,这个就是从那个帖子里转出来的问题1楼,初始化和实例化 能否具体说明下?2楼 你说的意思是private 2 =100会在 super()之后初始化? 这个没错。但是下边sub类中的sub()也在 private s1=200前执行?
      

  3.   

    又到这里来问了,我没和你说清楚吗?
    Super() {
      abc(); // 此时,初始化还在父类,但是却调用了子类的abc()
    }
        void abc() {
            System.out.println("s1 " + s1); // 此时,子类并没有初始化,因为父类还没有完成呢,所以属性是默认值0
        }
    明白了吗?初始化顺序是父类优先。