Проверьте атрибут подкласса
Я наткнулся на эту ситуацию, но я нене знаю, как с этим справиться правильно: я
class Myclass { }
class MyclassWithAwesomeStuff extends Myclass {
public boolean awesomeStuff;
}
m сохраняем объекты Myclass в массиве списков и повторяем этот список позже:
for(Myclass m : list) {
//here I want to check if awesomeStuff is true, in case it is a MyclasswithAwesomeStuff
}
Проблема здесь в том, что родительский класс Myclass нене знает атрибут awesomeStuff (и это не должнот, потому что это функция, которая поставляется только с производным классом). Но как я могу справиться с этим? Проблема в том, что массив содержит элементы Myclass и MyclassWithAwesomeStuff, и цикл foreach всегда приводит их к Myclass.
Интересно, это провал проекта?
//РЕДАКТИРОВАТЬ:
Хорошо, чтобы сделать мой вопрос немного более осязаемым, здесь больше информации. Я'я пытаюсь построить небольшую кофейню: я
class Coffee { }
class CoffeeMix extends Coffee {
public boolean shaken;
}
Сохранение элементов кофе в списке массивов:
ArrayList coffees = new ArrayList();
Таким образом, в этом списке массивов есть обычные объекты кофе и объекты кофейной смеси. Теперь я хочу отобразить все объекты кофейной смеси, которые потрясены:
for(Coffee c : coffees) {
//here is the same problem as above
}
Как я вижу из ответов / комментариев: instanceof кажется плохой идеей, потому что он порождает идею, лежащую в основе oo up, и интерфейс, который реализуют оба класса, тоже плохая идея, потому что нормальный кофе не может быть потрясен. Так как с этим справиться?