Classes Java para Passagens Nacionais e Internacionais
O código a seguir apresenta um sistema de passagens desenvolvido em Java, utilizando herança e polimorfismo. A classe abstrata Passagem reúne os atributos comuns, enquanto as classes PassagemNacional e PassagemInternacional especializam o cálculo do valor total.
Classe abstrata Passagem
A classe Passagem define os atributos básicos de uma passagem, como número, nome do passageiro, origem, destino, quantidade, valor da passagem, tarifa, serviço de bordo e seu valor.
public abstract class Passagem {
private int numero;
private String nome;
private String origem;
private String destino;
private int quantidade;
private float valorPassagem;
private float tarifa;
private boolean servicoBordo;
private float valorServicoBordo;
public Passagem(int numero, String nome, String origem, String destino, int quantidade, float valorPassagem, float tarifa, boolean servicoBordo, float valorServicoBordo) {
this.numero = numero;
this.nome = nome;
this.origem = origem;
this.destino = destino;
this.quantidade = quantidade;
this.valorPassagem = valorPassagem;
this.tarifa = tarifa;
this.servicoBordo = servicoBordo;
this.valorServicoBordo = valorServicoBordo;
}
public int getNumero() {
return numero;
}
public void setNumero(int numero) {
this.numero = numero;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getOrigem() {
return origem;
}
public void setOrigem(String origem) {
this.origem = origem;
}
public String getDestino() {
return destino;
}
public void setDestino(String destino) {
this.destino = destino;
}
public int getQuantidade() {
return quantidade;
}
public void setQuantidade(int quantidade) {
this.quantidade = quantidade;
}
public float getValorPassagem() {
return valorPassagem;
}
public void setValorPassagem(float valorPassagem) {
this.valorPassagem = valorPassagem;
}
public float getTarifa() {
return tarifa;
}
public void setTarifa(float tarifa) {
this.tarifa = tarifa;
}
public boolean isServicoBordo() {
return servicoBordo;
}
public void setServicoBordo(boolean servicoBordo) {
this.servicoBordo = servicoBordo;
}
public float getValorServicoBordo() {
return valorServicoBordo;
}
public void setValorServicoBordo(float valorServicoBordo) {
this.valorServicoBordo = valorServicoBordo;
}
public float valorTotal() {
return this.quantidade * (this.valorPassagem + this.tarifa + (this.servicoBordo ? this.valorServicoBordo : 0));
}
public void mostrarDados() {
System.out.println("Numero " + numero +
"\nNome " + nome +
"\nOrigem " + origem +
"\nDestino " + destino +
"\nQuantidade " + quantidade +
"\nValor da Passagem " + valorPassagem +
"\nTarifa " + tarifa +
"\nServico de Bordo ? " + (servicoBordo ? "sim" : "nao") +
"\nValor do Servico de Bordo " + valorServicoBordo +
"\nValor Total " + this.valorTotal());
}
}Classe PassagemNacional
A classe PassagemNacional herda de Passagem e acrescenta o atributo desconto, aplicado ao valor total quando a tarifa é maior que zero.
public class PassagemNacional extends Passagem {
private float desconto;
public PassagemNacional(int numero, String nome, String origem, String destino, int quantidade, float valorPassagem, float tarifa, boolean servicoBordo, float valorServicoBordo, float desconto) {
super(numero, nome, origem, destino, quantidade, valorPassagem, tarifa, servicoBordo, valorServicoBordo);
this.desconto = desconto;
}
public float getDesconto() {
return desconto;
}
public void setDesconto(float desconto) {
this.desconto = desconto;
}
public float valorTotal() {
float resp;
if (super.getTarifa() > 0) {
resp = super.valorTotal() * (1 - this.desconto / 100);
} else {
resp = super.valorTotal();
}
return resp;
}
public void mostrarDados() {
System.out.println("Passagem Nacional");
super.mostrarDados();
System.out.println("Desconto : " + this.desconto + "\nValor total em Real");
}
}Classe PassagemInternacional
A classe PassagemInternacional também herda de Passagem, mas converte o valor total para dólar utilizando a cotação do dólar.
public class PassagemInternacional extends Passagem {
private float cotacaoDolar;
public PassagemInternacional(int numero, String nome, String origem, String destino, int quantidade, float valorPassagem, float tarifa, boolean servicoBordo, float valorServicoBordo, float cotacaoDolar) {
super(numero, nome, origem, destino, quantidade, valorPassagem, tarifa, servicoBordo, valorServicoBordo);
this.setCotacaoDolar(cotacaoDolar);
}
public float getCotacaoDolar() {
return cotacaoDolar;
}
public void setCotacaoDolar(float cotacaoDolar) {
this.cotacaoDolar = cotacaoDolar;
}
public float valorTotal() {
return super.valorTotal() / this.cotacaoDolar;
}
public void mostrarDados() {
System.out.println("Passagem Internacional");
super.mostrarDados();
System.out.println("Cotacao do Dolar : " + this.cotacaoDolar + "\nValor total em Dolar");
}
}Classe de teste MovimentoPassagem
A classe MovimentoPassagem cria duas passagens, exibe seus dados, altera alguns atributos e exibe novamente as informações.
public class MovimentoPassagem {
public static void main(String[] args) {
PassagemNacional pn = new PassagemNacional((int) 1, "Maria da Paz", "Petrolina", "Recife", (int) 2, (float) 500, (float) 20, true, (float) 30, (float) 5);
PassagemInternacional pi = new PassagemInternacional((int) 2, "Carlos Antunes", "Sao Paulo", "New York", (int) 2, (float) 1000, (float) 30, false, (float) 50, (float) 2.06);
pn.mostrarDados();
pi.mostrarDados();
pn.setQuantidade(1);
pn.setDesconto((float) 3);
pi.setServicoBordo(true);
pi.setCotacaoDolar((float) 2.16);
pn.mostrarDados();
pi.mostrarDados();
}
}