鉴于我们现在在Java 8中的default
上有interface
个方法,我们是否可以通过内部(非static
)的父类访问实例方法interface
,例如:
public class App {
int appConst = 3;
public interface MyInstanceInterface {
default int myAppConst() {
return appConst;
}
}
}
我的interface
不是static
,因此应能够访问appConst
上下文中的App.this
。
此代码因以下编译错误而失败:
错误:无法从静态上下文引用非静态变量appConst
为什么吗
答案 0 :(得分:8)
原因是JLS §8.5.1:
成员接口是隐式静态的(第9.1.1节)。允许声明成员接口冗余地指定静态修饰符。
内部interface
永远不能是非static
。声明:
public class App {
...
public interface MyInterface {
...
}
}
完全等同于:
public class App {
...
public static interface MyInterface {
...
}
}
N.B:情况一直如此,在Java 8中保持不变。