【发布时间】:2015-03-18 10:45:25
【问题描述】:
假设以下示例:
public abstract class A {
public void readList() {
for (Integer o : InnerA.INT_LIST) {
System.out.println(o);
}
}
public static class InnerA {
protected static List<Integer> INT_LIST;
static {
INT_LIST = new ArrayList<Integer>();
INT_LIST.add(1);
}
}
}
public class B extends A {
public static class InnerB extends InnerA {
static {
INT_LIST.add(2);
}
}
}
我的假设是,当我打电话时
new B().readList();
输出将是
1
2
其实是
1
添加构造函数
public B() {
new InnerB();
}
导致预期的行为。我认为由于嵌套类是静态的,它会在创建新的 B 对象时被初始化(显然是在初始化 A 时)。
谁能给我解释一下?
谢谢。
【问题讨论】:
标签: java inheritance inner-classes