Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Duvida quanto a interação

No caso da herança, é possível que com a mudança dentro da classe Funcionario interfira com a classe dentro do Gerente, por exemplo ter outra senha dentro do funcionario? Fiz uns testes e pelo jeito não interfere, e gostaria de saber o porquê.

4 respostas

Fala Lucas!

Consegue detalhar mais a sua dúvida?

Expressar sua ideia postando o código ajuda. (:

A herança pode utilizar as mesmas varáveis e intervir na classe que a esta chamando? Por exemplo

public class Gerente extends Funcionario {//Gerente herda da classse Funcionario


    private double senha=2222;

    public void setSenha(double senha) {
        this.senha = senha;
    }
}
//sendo na classe herdada
public class Funcionario {
    private double senha=2282;

    public void setSenha(double senha) {
        this.senha = senha;
    }
}
solução!

Ah, sim, agora entendi.

Quando você declara novamente uma variável que já foi herdada, a instância em execução dá preferência a sua própria versão da variável. Elas coexistes. Tanto na Funcionario quanto na Gerente, porém... são dististintas entre si em escopos diferentes.

Este comportamento é chamado shadowing, ou seja, a classe que implementou(Gerente) passa a usar a sua própria versão da variável criada e não a da classe herdada(Funcionario).

Uma vez que cada classe possui seus próprios atributos e comportamentos, quando você cria private double senha=2222; em Gerente, e você chama o this.senha ele vai buscar na classe Gerente o atributo senha e como tem, então ele seta o seu próprio valor.

E ainda assim, como herança, a classe Funcionario ainda tem o seu próprio atributo senha intocável. Teste!:

class Funcionario {
  private double senha = 2282;

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

  public double getSenha() {
    return this.senha;
  }
class Gerente extends Funcionario {
  private double senha = 2222;

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

  public double minhaSenha() {
    return this.senha;
  }

  public double senhaQueHerdeiDoFuncionario() {
    return super.getSenha(); // vou no Funcionario pegar a senha dele.
  }

  public static void main(String[] args) {
    Gerente gerente = new Gerente();
    gerente.setSenha(10);

    System.out.printf("Senha que herdei do Funcionário: %s.%n", gerente.senhaQueHerdeiDoFuncionario());
    System.out.printf("Minha própria senha: %s.%n ", gerente.minhaSenha());
  }

}

O resultado será:

Senha que herdei do Funcionário: 2282.0.
Minha própria senha: 10.0.

Entendi ! Muito obrigado Bruno