Verificar atributo de uma subclasse
Eu me deparei com essa situação, mas não sei como lidar da maneira certa:
class Myclass { }
class MyclassWithAwesomeStuff extends Myclass {
public boolean awesomeStuff;
}
Estou salvando os objetos Myclass em um arraylist e depois iterarei por essa lista:
for(Myclass m : list) {
//here I want to check if awesomeStuff is true, in case it is a MyclasswithAwesomeStuff
}
O problema aqui é: a classe pai Myclass não conhece o atributo awesomeStuff (e não deveria porque esse é um recurso que vem somente com a classe derivada). Mas como posso gerenciar isso? O problema é que o arraylist contém elementos Myclass e MyclassWithAwesomeStuff e o loop foreach os lança sempre para Myclass.
Eu me pergunto se isso é um fracasso de design?
//EDITAR:
Ok, para tornar minha pergunta um pouco mais tangível, aqui mais infos. Estou tentando construir uma pequena cafeteria:
class Coffee { }
class CoffeeMix extends Coffee {
public boolean shaken;
}
Estou salvando os itens de café em uma lista de matriz:
ArrayList<Coffee> coffees = new ArrayList<Coffee>();
Portanto, nesta lista de matrizes existem objetos de café normais e objetos de mistura de café. Agora quero exibir todos os objetos de mistura de café, que são agitados:
for(Coffee c : coffees) {
//here is the same problem as above
}
Como eu posso ver nas respostas / comentários: o exemplo parece ser uma má idéia, porque atrapalha a idéia por trás e uma interface que ambas as classes implementam também é uma má ideia, porque um café normal não pode ser abalado. Então, como lidar com isso?