Boa noite, pesquisei um exercício na internet para tentar praticar melhor o que foi ensinado nesse curso e gostaria de um feedback em relação ao polimorfismo e a OO utilizada (se tem algo a melhorar ou um jeito mais fácil de ser feito)
O exercício informa que há 3 tipos de ingressos: o Normal, Camarote inferior e o Camarote superior. O usuário precisa escolher entre os 3 e é necessário informar o preço final (o exercício não sugeria nenhum preço, então inventei).
Em relação a herança, o exercício solicitou que existisse a classe Ingresso que seria herdada pelas classes Normal e VIP, depois a classe VIP seria herdada pela CamaroteSuperior e CamaroteInferior.
Também foi criada a classe SistemaInterno e a Teste para fazer algumas configurações em relação a interação com o usuário.
public abstract class Ingresso {
private double valor=100.50;
private int categoria;
public abstract double valorFinal();
public double getValor() {
return this.valor;
}
public void setValor(double valor) {
this.valor = valor;
}
public int getCategoria() {
return this.categoria;
}
public void setCategoria(int categoria) {
this.categoria = categoria;
}
}
public class VIP extends Ingresso {
private double adicional = 1.25;
public double valorFinal() {
return getValor()*getAdicional();
}
public double getAdicional() {
return this.adicional;
}
public void setAdicional(double adicional) {
this.adicional = adicional;
}
}
public class CamaroteInferior extends VIP {
public double valorFinal() {
return super.valorFinal();
}
}
public class CamaroteSuperior extends VIP {
private double adicionalSup = 1.50;
public double valorFinal() {
return super.valorFinal()*getAdicionalSup();
}
public double getAdicionalSup() {
return this.adicionalSup;
}
public void setAdicionalSup(double adicional) {
this.adicionalSup = adicional;
}
}
public class Normal extends Ingresso {
public double valorFinal() {
return getValor();
}
}
import java.util.Scanner;
public class SistemaInterno {
Scanner a = new Scanner(System.in);
public void PedirIngresso() {
int categoria=0;
System.out.println("Escolha um tipo de ingresso:\n 1- Normal\n 2- Vip Super\n 3- Vip Padrão\n");
categoria = a.nextInt();
categoria = VerificacaoSeguranca(categoria);
DefinirCategoria(categoria);
}
public int VerificacaoSeguranca(int categoria) {
boolean condicao = categoria!=1&&categoria!=2&&categoria!=3;
if(condicao) {
while(condicao) {
System.out.println("Digite apenas 1,2 ou 3, por favor!");
categoria = a.nextInt();
}
}
return categoria;
}
public void DefinirCategoria(int categoria) {
switch(categoria) {
case 1:
Ingresso normal = new Normal();
Valor(normal);
break;
case 2:
Ingresso superior = new CamaroteSuperior();
Valor(superior);
break;
case 3:
Ingresso inferior = new CamaroteInferior();
Valor(inferior);
break;
}
}
public void Valor(Ingresso aux){
double valor = aux.valorFinal();
System.out.println("O valor final do seu ingresso é: "+valor);
}
}
public class Teste {
public static void main(String[] args) {
SistemaInterno aux = new SistemaInterno();
aux.PedirIngresso();
}
}
Obrigado por ver até aqui.