有一个枚举,其中有两个常量、三个变量和一个方法,可以从中访问私有变量。对于第二个常量,我重写了不再可以访问私有变量的方法。出现错误:
不能从静态上下文引用非静态变量 b
但可以访问公共变量。不明白为什么?
enum MyEnum {
CONST_1,
CONST_2 {
@Override
public void print() {
System.out.println(b); // ошибка
System.out.println(c); // нормально
}
};
private int a;
private int b;
public int c;
public void print() {
System.out.println(a);
}
}
枚举中的常量是默认的
public static final。当使用覆盖的方法覆盖枚举中的某个常量时,将创建与嵌套静态类等效的内容- 从此枚举继承的匿名嵌套类
MyEnum:因此,禁止嵌套静态类(例如重写的枚举元素)访问外部类的私有成员。
要访问变量
b,您应该通过删除修饰符private或将其替换为public/来简单地使其更易于访问protected,或者使用以下方式引用祖先类super:关于主要SO的类似问题: