супер подфункции - PullRequest
       48

супер подфункции

1 голос
/ 08 декабря 2011

У меня есть функция в моем суперклассе (Speler), которая называется kiesKaart:

public Kaart kiesKaart(int spelerIndex){...}

В моей функции подкласса у меня есть та же функция с другим параметром, который переопределяет (я делаюиметь @Override перед ним, изменение этого на @Override() не помогает ...) супер функция:

public int kiesKaart(Kaart lak){...}

В моем основном у меня есть массив Spelers, где только первыйSpeler, а остальные AiSpelers (это имя подкласса):

spelerArr[0] = new Speler(hand[0]);
for (int i=1;i<AANTALSPELERS;i++) {
    spelerArr[i] = new AiSpeler(hand[i]);
}

Позже в моем коде я адресую spelerArr[i].kiesKaart, поэтому теперь я хочу, чтобы код адресовалправильный экземпляр kiesKaart.

Как я могу это сделать?

Ответы [ 6 ]

2 голосов
/ 08 декабря 2011

Вы перегрузили метод, создав новый с тем же именем и другими аргументами. Переопределение - это другое.

2 голосов
/ 08 декабря 2011

Подписи не совпадают. Таким образом, вы не переопределяете метод в суперклассе. Компилятор будет жаловаться, если вы используете @Override. Сигнатура метода также включает тип параметра.

1 голос
/ 08 декабря 2011

Использование @Override здесь ничего не даст, потому что эти два метода различны.Первый возвращает тип Kaart с int, а второй возвращает тип int с Kaart.

Другими словами, чтобы убедиться, что вы вызываете правильный метод, вам нужночтобы убедиться, что вы отправили правильный параметр (int для первого, Kaart для второго).

0 голосов
/ 08 декабря 2011

Этот может быть полезен как краткий справочник о том, что возможно, а что нет, и как его назвать

0 голосов
/ 08 декабря 2011

Вы перегружаете свой метод суперкласса, а не переопределяете. Наличие аннотации не меняет этого факта.

Если вы хотите определить тип вызывающего объекта (полиморфизм), вы должны переопределить метод - тот же список параметров, тот же тип возврата или подкласс (как в Java 5) и, конечно, то же имя.

0 голосов
/ 08 декабря 2011

Я полагаю, вам придется использовать instanceof, чтобы определить, является ли это Speler или AiSpeler, и привести его к соответствующему объекту перед вызовом kiesKaart.

...