2015-01-12 2 views
0

Я использовал код:метод доступа в подклассе

//change size of raven 
birdsByKey.get(instructions[0]).SizeRaven(newSize); 

для того, чтобы попытаться изменить размер вороны.

Что мне делать, чтобы использовать следующий метод (в классе «Ворон»)?

+2

'if (raven instanceof Raven)' is * does not needed *. У вас есть Raven raven = new Raven(); '. – TheLostMind

+1

'Но это не работает! Все остальное в порядке с моей программой. «Определить« не работает »? Если все остальное в порядке, то я предполагаю, что это ошибка времени выполнения, а не время компиляции. – John3136

+1

Не совсем, нет; используйте его только тогда, когда вы не уверены в том, какой подкласс у вас на самом деле. –

ответ

2

birdsByKey.get() собирается вернуть Bird. A Bird не будет иметь метод changeRavenSize() (так как это уникально для Ворона).

Вам нужно что-то вроде:

Bird b = birdsByKey.get(instructions[0]); 
if (b instanceof Raven) { 
    Raven r = (Raven)b; 
    r.changeSizeRaven(newSize); 
} 

Как отмечает EJP, вы действительно хотите метод changeSize() для Bird который Raven переопределять. Затем вы вводите код

birdsByKey.get(instructions[0]).changeSize(newSize); 

первый способ, который вам нужно редактировать каждый раз, когда вы добавляете новый тип птицы. Второй способ - добавить столько птиц, сколько захотите, и он просто продолжит работать ...

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