K.T*_*ess 6 java inheritance static
class A {
static int super_var = 1;
static {
System.out.println("super");
}
}
class B extends A {
static int sub_var = 2;
static {
System.out.println("sub");
}
}
public class Demo{
public static void main(String []args){
System.out.println(B.super_var);
}
}
Run Code Online (Sandbox Code Playgroud)
产出是:
super
1
Run Code Online (Sandbox Code Playgroud)
这意味着子类不会加载或任何其他东西?它是如何工作的?
Roh*_*ain 12
当您static在子类引用上访问超类的字段时,只会加载和初始化声明该字段的类,在这种情况下它是A.这在JLS§12.4.1中指定- 发生初始化时:
对
static字段的引用(第8.3.1.1节)仅导致实际声明它的类或接口的初始化,即使它可能通过子类的名称,子接口或实现接口的类来引用.
强调我的.
因此,在您的代码中,类B甚至不会被初始化,因此它的static块将不会被执行.
| 归档时间: |
|
| 查看次数: |
1767 次 |
| 最近记录: |