public enum Parent {
item1(1){
public void testing() {
add();
multiply();
minus(); // error here!!!
}
}, item2(2);
private int i ;
Parent(int i){
this.i = i;
}
public void setI(int i ){
this.i = i;
}
public int getI(){
return i;
}
public void multiply(){
}
protected void add(){
}
private void minus(){
}
}
正如你们所看到的,他们在同一个班级,minus()
怎么不能在内部使用?通常内部类可以访问外部类中的private method/field
吗?
答案 0 :(得分:8)
为了能够从minus()
访问item1
,您必须protected
(或public
)。
考虑Parent
和item1
的正确方法是作为基类和子类。
来自JLS:
枚举常量的可选类主体隐式定义了一个匿名类声明(第15.9.5节),它扩展了直接封闭的枚举类型。
答案 1 :(得分:3)
实际上,当您在创建枚举对象时提供实现时会发生什么,您基本上是使用额外的方法扩展Parent
类,即 Annonymous 实现。因此,它不允许访问Parent
类的私有方法,但允许protected
和public
。
enum A{
a{
@Override
public void method() {
// TODO Auto-generated method stub
super.method();
}
};
public void method(){
}
}
这应该解释一下eclipse提供的@Override
注释。
答案 2 :(得分:1)
问题是" item1"它不是Parent的内部类,它实际上是顶级类。要验证是否看到item1的生成类,它是Parent $ 1.class,如果它是内部类,它将是Parent $ item1.class