2014-10-07 2 views
1

해결할 수없는 문제가 발생했습니다. 이제 우리는 슈퍼 클래스 A를 있다고 가정 해 봅시다 :자바 추상 ​​클래스 및 변수 무시

public enum Enumeration { 
    A, B, C; 
} 

public abstract Class A { 
    private Enumeration e; 

    public void someMethod { 
      // do something here with 'e'. 
    } 
} 

지금의 우리가 내가 값이 사용되지 않습니다 있음을 경고 컴파일러를 얻을 여기에 클래스 B.

public Class B extends A { 
    private final Enumeration = e.A; 
} 

가 있다고 가정하자.

클래스 A에서 메서드를 정의하기 만하면되므로 변수를 정의해야합니다. 하지만 하위 클래스에서 변수에 새로운 고정 값을 제공하려고합니다.

이것이 가능하지 않습니까?

+1

'private final Enumeration = e.A; '에는 이름이 없습니다. – August

+0

'private final Enumeration = e.A;'매우 똑똑한 코드처럼 보입니다. –

+0

BTW, 이것은 '경고'입니다. 즉, 수행 할 수 있음을 의미합니다. –

답변

3

필드를 재정의 할 수 없습니다. 특정 enum 인스턴스를 클래스에 할당하려면 생성자를 사용하십시오.

public abstract Class A { 
    private final Enumeration e; 

    protected A (Enumeration e) { 
     this.e = e; 
    } 

    public void someMethod { 
      // do something with 'e'. 
    } 
} 

public Class B extends A { 
    public B() { 
     super(Enumeration.A); 
    } 
} 
+0

감사합니다. 그것은 트릭을했다. – machinery