【发布时间】:2011-08-17 13:26:12
【问题描述】:
super 的优先级是否高于outer class?
假设我们有三个类:
- A 类
- B 类
- ClassB 中扩展 ClassA 的匿名类
ClassA.java:
public class ClassA {
protected String var = "A Var";
public void foo() {
System.out.println("A foo()");
}
}
ClassB.java:
public class ClassB {
private String var = "B Var";
public void test() {
new ClassA() {
public void test() {
foo();
System.out.println(var);
}
}.test();
}
public void foo() {
System.out.println("B foo()");
}
}
当我打电话给new ClassB().test() 时,我得到以下输出(这几乎是预期的):
A foo()
A Var
问题:是否定义了内部类首先从超类获取(方法和成员)然后从外部类获取的地方,还是依赖于 JVM 编译器实现?我查看了 JLS(§15.12.3),但找不到任何参考,也许它在那里被指出,但我误解了一些条款?
【问题讨论】:
-
我尝试遵循 JLS 中的逻辑,但还没有喝咖啡 ;-) 根据经验我会说:我漂亮确定这是明确指定且不依赖于实现。 如果它是依赖于实现的,那么它将取决于编译器而不是JVM,因为该决定是在编译时完成的。
-
@Joachim - 我写错了 JVM,感谢您指出这一点。
标签: java inheritance inner-classes