Skip to content

Instantly share code, notes, and snippets.

@gustavopinto
Last active October 17, 2019 18:36
Show Gist options
  • Save gustavopinto/b52294f0063833cf8d07d38a13de343b to your computer and use it in GitHub Desktop.
Save gustavopinto/b52294f0063833cf8d07d38a13de343b to your computer and use it in GitHub Desktop.
package polimorfismo;
public class BMW implements Carro {
public double velocidadeMaxima (){
return 200;
}
}
package polimorfismo;
public interface Carro {
public double velocidadeMaxima();
}
package polimorfismo;
public abstract class Cliente implements Pessoa {
private Corrida corrida;
private String nome;
private boolean emCorrida;
public Cliente(String nome) {
this.nome = nome;
this.emCorrida = false;
}
public void pedirCorrida(int de, int para) {
this.corrida = new Corrida(de, para);
this.emCorrida = true;
}
public double pagarCorrida() {
this.emCorrida = false;
return corrida.total();
}
public String getNome () {
return nome;
}
public boolean emCorrida(){
return emCorrida;
}
public Corrida getCorrida(){
return corrida;
}
public abstract void avaliarCorrida(int estrelas);
}
package polimorfismo;
public class ClientePessoaFisica extends Cliente {
public ClientePessoaFisica(String nome) {
super(nome);
}
@Override
public void avaliarCorrida(int estrelas) {
getCorrida().avaliar(estrelas);
}
}
package polimorfismo;
public class ClientePessoaJuridica extends Cliente {
private Corrida corrida;
public ClientePessoaJuridica(String nome) {
super(nome);
}
@Override
public void pedirCorrida(int de, int para) {
this.corrida = new Corrida(de, para);
}
@Override
public double pagarCorrida() {
return corrida.total() * 0.8;
}
@Override
public void avaliarCorrida(int estrelas) {
this.corrida.avaliar(estrelas);
}
}
package polimorfismo;
public class Corrida {
private int de, para, estrelas;
private Motorista motora;
public Corrida (int de, int para) {
this.de = de;
this.para = para;
this.estrelas = 0;
}
public int total() {
return de * para;
}
public void avaliar(int estrelas) {
this.estrelas = estrelas;
}
public int getAvaliacao(){
return estrelas;
}
public void associarMotorista(Motorista motora) {
this.motora = motora;
}
}
package polimorfismo;
public class Motorista implements Pessoa {
private boolean dirigindo;
private String nome;
private Carro carro;
private Corrida corrida;
public Motorista(String nome, Carro carro) {
this.dirigindo = false;
this.carro = carro;
}
public boolean aceitarCorrida(Corrida corrida) {
if(!dirigindo) {
dirigindo = true;
}
this.corrida = corrida;
return true;
}
public void encerrarCorrida() {
corrida.associarMotorista(null);
}
public boolean emCorrida() {
return dirigindo;
}
@Override
public String getNome() {
return nome;
}
}
package polimorfismo;
public interface Pessoa {
public abstract String getNome();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment