3
respostas

Dúvida a respeito de heranças

Digamos que eu tenho uma classe Funcionário e uma classe Gerente, da mesma forma que no curso. A classe Gerente herdará a classe Funcionário porém não poderá utilizar um dos atributos nela contidos, é possível?

No exemplo do curso foi o inverso, Funcionário não conseguia utilizar o atributo "senha" que o Gerente utilizava.

3 respostas

Olá Charlan, tudo bem com você?

Na verdade não será possível ter esse comportamento, podemos ler a herança como é um, no nosso caso, Gerente é um Funcionário, por essa razão ele tem direito a todas as propriedades contidas em Funcionário além de suas próprias particularidades!

Se ele não tivesse acesso a alguma propriedade, então gerente não seria um funcionário, eles poderiam ser até parecidos, mas não poderíamos utilizar essa notação "é um".

Por isso o exemplo do curso o Funcionário de fato não consegue utilizar os atributos, porque por mais que eles sejam parecidos, de fato, um funcionário não é um gerente :)

Conseguiu Compreender? Qualquer coisa estou a disposição!

Abraços e Bons Estudos :)

Bom dia!

"A classe Gerente herdará a classe Funcionário porém não poderá utilizar um dos atributos nela contidos, é possível?".

Só é possível se o atributo for definido como 'private'. Aí sim , é possível.

"No exemplo do curso foi o inverso, Funcionário não conseguia utilizar o atributo "senha" que o Gerente utilizava. "

Exato, pois todo Gerente é um Funcionário, mas nem todo Funcionário é um Gerente.

Vou usar os mesmos comentários que deixei para o Aluno Felipe..

Ao criar Funcionário g1 = new Gerente( ); , sua variável 'g1' é uma classe do tipo 'Funcionário'. Por isso você só consegue acessar os métodos dessa classe. Gerente extende de Funcionário, mas a definição do tipo da variável é que vale.

Quando você cria: Gerente g1 = new Gerente( ); , sua variável 'g1' é uma classe do tipo 'Gerente' , e que extende de Funcionário. . Por isso você consegue acessar todos métodos das duas classes.

Do mesmo modo, seria se criasse: Gerente g1 = new Funcionário( ); , sua variável 'g1' é uma classe do tipo 'Gerente' , e que extende de Funcionário, e que por isso aceita uma instância de Funcionário. Mas é do tipo Gerente. Por isso você consegue acessar todos métodos das duas classes.

Consegui compreender sim Geovani. Thiago, realmente na aula após essa o professor deu exemplo que deixando o atributo como private não consigo utiliza-lo na classe filha.

Muito obrigado por se disporem a responder a minha dúvida.

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