2013-09-22 2 views
0

У меня есть класс с именем Occupant и extended Occupant classes для различных оккупационных типов, таких как животных, продукты питания, инструментов, Treasure.Метод доступ расширенного класса

Все жильцы размещены по адресу GridSquares, Площадь может содержать до 3 человек.

Occupant класс имеет метод для получить все оккупанты на GridSqure, когда позиция задается. Метод вернет Окно обитателей с расширенными классами пассажиров. (E.G: Animal, A Tool and A Food).

Occupant[] allOccupants = newGridSquare.getOccupants(); 

    for (Occupant oneOccupant : allOccupants) 
     { 
     if(oneOccupant.getStringRepresentation() == "A") 
     { 

      player.reduceStamina(oneOccupant.getDanger()); 

     } 
    } 

компилятор не сможет получить доступ к getDanger метода в классе животных только потому, что я уже назначен как оккупант.

Как я могу получить доступ к методу getDanger в расширенном классе жителя Animal?

+1

Связанный: [Как сравнить строки в Java?] (Http://stackoverflow.com/questions/513832/how -do-i-compare-strings-in-java) –

+0

Ваш вопрос непонятен; вы говорите, что только у «Animal' есть метод' getDanger', а 'Occupant' - нет? Отправьте код для занятий. – chrylis

+0

@SotiriosDelimanolis Это еще одна проблема :) –

ответ

1

Вы можете бросить экземпляр

for (Occupant oneOccupant : allOccupants) 
{ 
    if("A".equals(oneOccupant.getStringRepresentation())) 
    { 
     Animal animal = (Animal) oneOccupant; 
     player.reduceStamina(animal.getDanger()); 
    } 
} 

Предполагая, что в "A" является идентификатором для Animal экземпляра и животных является подклассом Occupant и имеет метод getDanger(). В противном случае, первый сделать проверку

if (oneOccupant instanceof Animal) { 
    Animal animal = (Animal) oneOccupant; 
    player.reduceStamina(animal.getDanger()); 
} 

Related:

0

Как getDanger не существует в классе Жителя но в конкретном классе Animal. Таким образом, вам нужно понизить класс OneCccupant To Animal.

Другое решение - объявить getDanger под классом класса «жилец» и реализовать его в расширенном классе. В случае классов, кроме Animal, вы можете предоставить пустую реализацию. Но это не очень хороший подход с точки зрения дизайна, но иногда прибегают к устаревшему коду

Смежные вопросы