Проблема вызова метода суперкласса из статического метода подкласса - PullRequest
0 голосов
/ 19 сентября 2011

У меня есть класс Mouse, который расширяет класс MammalMouse у меня есть статический метод, который принимает в качестве параметра ArrayList из Mouse объектов, например:

public static void mate(ArrayList<Mouse> mice)

Внутри этого статического метода у меня есть строка кода:

if((mice.get(i).getIsMale ^ mice.get(j).getIsMale) && (mice.get(i).getAge > 1 ) &&  (mice.get(j).getAge > 1 ) )
    //if either mouse is male but not both and if both are older than 1 day

, где getIsMale и getAge - методы, определенные в млекопитающем суперкласса, а i и j - переменные, которые я использую внутри статического метода mate.

Я получаю 4 ошибки от компилятора в приведенной выше строке: не удается найти символ.Один для каждого getIsMale и один для каждого getAge

Буду признателен за любую (быструю) помощь.Я должен отправить это задание и идти спать.Спасибо!

Ответы [ 2 ]

2 голосов
/ 19 сентября 2011

Вот ваш код:

if ((mice.get(i).getIsMale ^ mice.get(j).getIsMale) && 
    (mice.get(i).getAge > 1 ) && 
    (mice.get(j).getAge > 1 )) {
    // ...
}

То, как это написано, вы говорите: «Дайте мне значение поля getIsMale» и так далее. Это getAge и getIsMale не поля: это методы. Таким образом, вы должны позвонить им:

if ((mice.get(i).getIsMale() ^ mice.get(j).getIsMale()) && 
    (mice.get(i).getAge() > 1 ) && 
    (mice.get(j).getAge() > 1 )) {
    // ...
}

(Причина, по которой компилятор Java говорит «символ не найден», а не «его поле»), заключается в том, что имена полей и имена методов находятся в разных пространствах имен. Если вы хотите, вы можете написать класс, который имеет поле с именем foo и метод с именем foo. Итак ... компилятор сообщает вам об обнаруженной ошибке, а не пытается угадать, что вы на самом деле имели в виду.)


Незначительный момент: соглашение JavaBeans гласит, что метод получения логического свойства должен называться isXxx, а не getXxx. Вы должны переименовать getIsMale() в isMale().

2 голосов
/ 19 сентября 2011

Быстрый ответ (:-P): Вы должны добавить скобки так, чтобы это было getIsMale() и getAge(). Все функции должны вызываться в скобках в Java.

Комментарий стиля: булевы геттеры обычно должны иметь имя isXXX, а не getXXX, поэтому ваш male геттер должен иметь имя isMale, а не getIsMale.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...