2012-02-04 10 views
0

에서 추상 클래스에서 구체적인 방법을 상속는 타격과 같은 클래스 계층 구조가 있습니다 someEventClass1이 EventClass를 확장변수 그림자와 나는 할당에서 일하고 있어요 자바

추상적 인 EventClass

someEventClass2이 확장 EventClass

간단히 :

abs EventClass{ 
//not in use just make it compile 
int priority; 
concrete compareTo(){ 
    //need access priority when working in subclass} 
} 
someEventClass1 extends EventClass{ 
    int priority; 
} 

내 EventClass 나는 모든 하위 클래스에 의해 상속을 기대하는 구체적인 방법을 compareTo (이벤트),

그것은 다른 이벤트의 우선 순위 (int)를 비교합니다. 분명히이 메서드 내에서 하위 클래스 내에서 우선 순위에 액세스해야합니다. 컴파일하려면 EventClass에 int 우선 순위를 추가해야하며 하위 클래스에서이를 얕게 만들 수 있다고 생각하고 상속 된 compareTo와 잘 작동합니다.

그러나 제대로 작동하지 않아 compareTo가 작동하지 않는 것 같습니다.

EventClass에서 int 우선 순위와 compareTo()를 지우면 내 모든 하위 클래스 (추한 중복 코드)에 compareTo를 넣으십시오. 그것은 잘 작동 ...

어떤 사람이 이것을 설계하는 데 도움이 될 수 있습니까? 또는 내가 무엇을 놓쳤는 지 말해 ...

어떤 도움을 주셔서 감사합니다!

답변

0

필드는 Java에서 다형성이 아닙니다. 방법은 있습니다. getPriority() 메서드를 Event 클래스에 추가하고 compareTo 메서드에서이 메서드를 호출합니다.

그런 다음 하위 클래스의 getPriority 메소드를 재정의 할 수 있으며 해당 메소드가 다형성 방식으로 호출됩니다. getPriority 메서드를 외부에서 사용하지 않는 경우 protected으로 지정할 수 있습니다.

사이드 노트 : 자바 명명 규칙을 배우고 준수하십시오. 모호한 의사 코드가 아닌 실제 Java 코드를 사용하면 질문을 이해하는 것이 더 쉬울 것입니다.

0

하위 클래스의 추가 선언 int priority은 수퍼 클래스의 int priority을 어둡게합니다. 이 시도 :

abstract class Event { 
    protected int priority; 
    public int compareTo(Object other) { 
     Event ev = (Event) other; 
     return priority - ev.priority; 
    } 
} 

class SomeEvent extends Event { 
} 

당신이 당신의 priorityprotected로 또는 private 및 제공하는 해당 getter 메소드가 다른 주제 선언 여부.

관련 문제