package bancoNico; public class Empregado {
private String nome;
private String cpf;
private double salario; // protected - fica publico para os filhos ainda
public double bonus () { // ele colocou getBonificacao
return this.salario * 0.1;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public double getSalario() {
return salario;
}
public void setSalario(double salario) {
this.salario = salario;
}
}
package bancoNico;
public class Gerente extends Empregado{ // gerente e um funcionario ele vem de funcionario pois tambem e um empregado assim ele e uma extensa, ou seja estende de empregado
private int senha = 5; // declarei a senha como 5
public boolean autentica (int tentativaSenha) {
return this.senha == tentativaSenha;
}
@Override
public double bonus () { // ele colocou getBonus esse metodo ja tem na classe mae ele foi reescrito
// return this.salario;
System.out.println("Teste de bonus do GERENTE"); // na aula Aplicando Polimorfismo em 14:37 ele adc esse print para diferenciar do metodo bonus do empregado
return super.getSalario() + super.bonus(); // super.salario - mostra que salario vem da classe pai
// super.bonus() - pega o metodo da classe mae Empregado
// Ps: se colocasse o this.bonus() ele mesmo iria ficar se chamando dando erro num loop
}
}
package bancoNico;
public class ControleBonus {
private double soma;
public void registra(Empregado e) { //Esse metodo fica bem generico assim podemos colocar mais 1000 empregados que vai dar bom
this.soma += e.bonus(); // chamou o bonus do empregado se clicar com o Ctrl observe
}
public double getSoma() {
return soma; // aqui pq nao coloca o this??
}
}
package bancoNico;
public class EditorVideo extends Empregado {
public double registra() {
System.out.println("Bonus EDITOR DE VIDEO");
return 150;
}
}
package bancoNico;
public class Designer extends Empregado {
public double registra() {
System.out.println("Bonus do DESIGNER");
return 200;
}
}
package bancoNico;
public class TesteReferencias {
public static void main(String[] args) {
// aqui ele vai testar as chamadas de classes usando referências
Empregado g1 = new Gerente();
g1.setNome("Marcos");
g1.setSalario(5000);
Empregado g2 = new Gerente();
g2.setNome("Marcus");
System.out.println("A 1 forma funciona: " + g1.getNome() + " A segunda tambem: " + g2.getNome());
Empregado emp1 = new Empregado();
emp1.setSalario(2000);
// Gerente emp2 = new Empregado(); nao pega pois a heranca e de mae para filha e nao vice-versa
EditorVideo ed1 = new EditorVideo();
ed1.setSalario(2500);
Designer d = new Designer();
d.setSalario(2000);
ControleBonus controle = new ControleBonus();
controle.registra(g1);
controle.registra(emp1);
controle.registra(ed1);
controle.registra(d);
System.out.println(controle.getSoma());
System.out.println(d.bonus());
System.out.println(emp1.bonus());
System.out.println(ed1.bonus());
System.out.println(g1.bonus());
}
}
Saida:
A 1 forma funciona: Marcos A segunda tambem: Marcus
Teste de bonus do GERENTE 6150.0 200.0 200.0 250.0 Teste de bonus do GERENTE 5500.0