1
resposta

Herança, modelo diferente do que foi explicado. Está correto?

1 - Classe Funcionario - Atenção no atributo salalario(private);

public class Funcionario {

    private String nome;
    private String cpf;
    private double salario;    

    public double 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 double setSalario(double salario) {
        return this.salario = salario;
    }


}

Classe gerente - Atenção para metodo getBonificacao(){}

Pode observar que não estou utilizando SUPER.SALARIO, neste método, que poderia, mas teria que alterar na Classe Funcionario private para protected salario.


public class Gerente extends Funcionario{

    private int senha;

    public boolean autentica(int senha) {    
        if (this.senha == senha) {
            return true;
        }        
        return false;
    }

    public double getBonificacao() {    
        return getSalario() + 1000;
    }

    public int getSenha() {
        return senha;
    }

    public void setSenha(int senha) {
        this.senha = senha;
    }

}

Testando a Classe Gerente, dentro do método GetBonificacao, vai funcionar sem problema nenhum.

Ou seja, a variável(g1) que instacio o objeto gerente que é filha de funcionário, consigo definir:

g1.setsalario(); g1.setbonificação(); sendo este permanecendo private Salario (Classe Funcionario), e chamo getSalario, dentro do método getBonificacao() na classe gerente.

Resumindo, não preciso do Protected como visibilidade do atributo salario, dentro da classe funcionário.

public class TesteGerente {

public static void main(String[] args) {
    Gerente g1 = new Gerente();
    g1.setNome("Danilo Carvalho");
    g1.setCpf("020202020");
    g1.setSalario(7000.0);
    g1.setSenha(123456);

    System.out.println(g1.getNome());
    System.out.println(g1.getCpf());
    System.out.println(g1.getSalario());
    System.out.println(g1.getBonificacao());
    System.out.println(g1.getSenha());
    System.out.println(g1.autentica(12345));

}

}

insira seu código aqui
1 resposta

Perfeito, Danilo! Em alguma aula o Nico ainda deve mencionar que devemos ter como uma regra geral, sempre deixar nossos atributos private (há exceções), portanto a sua solução está correta sim! :)

Se tiver qualquer dúvida é só avisar! Bons estudos!!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software