Я использовал код:метод доступа в подклассе
//change size of raven
birdsByKey.get(instructions[0]).SizeRaven(newSize);
для того, чтобы попытаться изменить размер вороны.
Что мне делать, чтобы использовать следующий метод (в классе «Ворон»)?
Я использовал код:метод доступа в подклассе
//change size of raven
birdsByKey.get(instructions[0]).SizeRaven(newSize);
для того, чтобы попытаться изменить размер вороны.
Что мне делать, чтобы использовать следующий метод (в классе «Ворон»)?
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);
первый способ, который вам нужно редактировать каждый раз, когда вы добавляете новый тип птицы. Второй способ - добавить столько птиц, сколько захотите, и он просто продолжит работать ...
'if (raven instanceof Raven)' is * does not needed *. У вас есть Raven raven = new Raven(); '. – TheLostMind
'Но это не работает! Все остальное в порядке с моей программой. «Определить« не работает »? Если все остальное в порядке, то я предполагаю, что это ошибка времени выполнения, а не время компиляции. – John3136
Не совсем, нет; используйте его только тогда, когда вы не уверены в том, какой подкласс у вас на самом деле. –