2012-11-30 3 views
4
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에 액세스 할 수 있습니까?항목의 생성자에있는 Java Enum 개인 메소드

+0

오류 메시지가 정확히 무엇입니까? –

답변

8

item1에서 minus()에 액세스하려면 protected (또는 public)으로 지정해야합니다.

Parentitem1에 대한 올바른 생각은 기본 클래스 및 하위 클래스입니다. JLS에서

:

열거 형 정수의 옵션 클래스 본문이 암시 적으로 익명의 클래스 선언을 정의 (§15.9.5)를 직접 둘러싸는 열거 형을 확장 을.

1

문제는 "item1"이 Parent의 내부 클래스가 아니라 실제로 최상위 클래스라는 것입니다. item1 클래스에 대해 생성 된 클래스를 확인하려면 Parent $ 1.class입니다. 부모 클래스 $ item1.class

2

사실 실제로 열거 형 개체를 만드는 동안 구현을 제공하면 실제로 확장됩니다 여분의 메소드가있는 Parent 클래스. 예 : 익명 구현. 따라서 Parent 클래스의 개인 메소드에 액세스 할 수 없지만 protectedpublic을 허용합니다.

enum A{ 
     a{ 
      @Override 
      public void method() { 
       // TODO Auto-generated method stub 
       super.method(); 
      } 
     }; 


     public void method(){ 

     } 
    } 

이 내용은 eclipse에서 제공 한 @Override 주석을 참조하십시오.