Затенение переменных и наследование конкретного метода от абстрактного класса в Java - PullRequest
0 голосов
/ 04 февраля 2012

Я работаю над заданием, в котором есть иерархия классов, например удар:

аннотация EventClass

someEventClass1 расширяет 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 (Event in), который я ожидаю, что он наследуется всеми подклассами

будет сравнивать приоритет (int) различных событий. Очевидно, что внутри этого метода мне нужно получить доступ к приоритету внутри подклассов. Чтобы сделать его компилируемым, мне нужно добавить приоритет int в EventClass, и я подумал, что я могу обработать его в подклассах, и он будет прекрасно работать с наследованным CompareTo.

Однако, он не работает должным образом, похоже, сравнение не работает.

Если я удаляю приоритет приоритета int и compareTo () в EventClass, поместите CompareTo во все мои подклассы (ужасно дублированный код). Работает просто отлично ...

Может кто-нибудь помочь мне спроектировать это? Или скажи мне, что я пропустил ..

Спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 04 февраля 2012

Дополнительное объявление 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 {
}

Если вы объявите свой priority как protected или как private и предоставите соответствующий метод получения, это другая тема.

0 голосов
/ 04 февраля 2012

Поля не являются полиморфными в Java. Методы есть. Добавьте метод getPriority() в класс Event и вызовите этот метод из метода compareTo.

После этого вы сможете переопределить метод getPriority в подклассах, и соответствующий метод будет вызван полиморфным способом. Обратите внимание, что если метод getPriority не используется извне, вы можете сделать его protected.

Примечание: изучите соглашения об именах Java и придерживайтесь их. И было бы легче понять ваш вопрос, если бы вы использовали реальный код Java, а не скрытый псевдокод.

...