我刚刚回答了这个问题,解释了如何解决编译问题:
但是我不明白为什么首先会出现错误。
以下是一个以枚举形式书写的示例:
public enum MyEnum {
FIRST {
@Override
public String doIt() {
return "1: " + someField; //error
}
},
SECOND {
@Override
public String doIt() {
return "2: " + super.someField; //no error
}
};
private String someField;
public abstract String doIt();
}
这里与抽象类完全相同
abstract class MyClass {
class FIRST extends MyClass {
@Override
public String doIt() {
return "1: " + someField; //no error
}
};
class SECOND extends MyClass {
@Override
public String doIt() {
return "2: " + super.someField; //no error
}
};
private String someField;
public abstract String doIt();
}
在enum
实现中,FIRST
无法访问someField
,但在抽象类中可以访问。此外,添加super
可以解决该问题,去掉字段上的private
修饰符也可以。有人知道为什么会出现这种行为上的细微差异吗?
this.someField
代替someField
,对于枚举/类情况下都会生成相同的错误信息:The field Main.MyClass.someField is not visible
。 - sp00m