Estou desenvolvendo um aplicativo(cardapio digital) para uma pizzaria e estou com problemas para gerenciar algumas coisas;
Os itens tem alguns atributos em comum como nome, descrição, etc. e alguns especificos, como por exemplo a pizza que tem 4 preços, um para cada tamanho;
Em certos momentos eu vou precisar te-los todos agrupados em uma lista e em outros, dividi-los mais de acordo com seu tipo para mexer em seus atributos.
Tentei fazer uma classe abstrata pai e extender cada tipo mas não manjo muito de herança, não sei o que declarar e instanciar na classe abstrata e o que declarar e instanciar nas filhas, quando criar uma lista da classe pai, quando criar uma lista da classe filha, quando declarar classe pai e instanciar filha, quando declarar filha e instanciar filha, etc, e isso esta me gerando alguns erros.
Há alguma outra opção para este problema, como por exemplo haver uma unica classe para todos os itens e diferenciar suas implementações internamente? Pensei em fazer isso mas achei muito gambiarra. Há alguma boa prática do que fazer em caso parecido?
Qualquer sugestão é bem vinda. Obrigado.
não acho que herança seria necessario não, qual seria a classe pai (e quais atributos) e a classe filha(e os atributos). explica melhor pq vc acha que usar herança seria o ideal, se for só por causa do tipo da pizza eu acho melhor colocar como atributo, até pq se cada tipo de pizza for uma classe vai ser bem complicado quando a pizzaria decidir adicionar uma pizza nova no cardapio xD
Tipo ItemCardapio(comum):
long id;
int tipo; (definido em outro lugar)
String nome;
String desc;
Double preço;
Tipo ItemCardapio_Pizza:
long id;
int tipo;
String nome;
String desc;
Double preço_P;
Double preço_M;
Double preço_G;
Double preço_F;
Havera momentos em que eu vou precisar tratar os dois como um tipo só e momentos em que vou precisar tratar mais especificamente. Pra colocar numa lista, arrumar o adapter (to programando pra android), puxar um tipo especifico do banco, etc.
quais seriam as outras classes filhas de ItemCardapio? se só tiver uma não vale a pena usar herança
Mas como eu faço quando precisar colocar ambos em uma lista?
se so tiver essas duas classes tira a ItemCardapio e usa só a Pizza, se quiser continuar usando herança pra colocar algo tipo bebidas, vc instancia declara uma List de ItemCardapio:
//assim vc consegue ter td numa List só
List<ItemCardapio> itens = new ArrayList<>();
ItemCardapio item = new ItemCardapio();
Pizza pizza = new Pizza();
itens.add(item);
itens.add(pizza);
//pra recuperar os metodos da Pizza:
for (ItemCardapio i: itens){
if (i instanceof Pizza){
System.out.println("este item é uma pizza, é só fazer cast q vc usa ele como Pizza:");
Pizza p = (Pizza)i;//aqui vc faz o cast e transforma a instancia de ItemCardapio em Pizza
}
}