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ê.
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ê.
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;
}
}
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