访问和初始化静态字段Java的顺序

时间:2015-02-16 21:19:16

标签: java constructor static

考虑以下示例:

class Super{ 
   static String ID = "1234";
}
class Sub extends Super{
  static{ System.out.println("In Sub");
}

public static void main(String ...args){
  System.out.println(Sub.ID);
}

我理解这一点:如果这是main中的新Sub(),它将调用Super类的super()构造函数,显然首先执行静态初始化器,如果在Sub中有任何静态初始化器,那么非静态初始化块和这个特定顺序的构造函数。

说完这个,这个程序打印“1234”,如果Sub没有继承静态字段怎么样,这不应该是编译错误吗?

1 个答案:

答案 0 :(得分:2)

您可以通过该类型的子类型的表达式访问(可访问的)static类型的成员。在编译时,在这种情况下,它通过声明类型Super解析为访问。