Membro Privado é herdado, mas não é visível!
Posted by Alberto on March 5th, 2008[EDITADO]
Após alguns comentários, resolvi buscar outras fontes de leitura. E estou convencido de que errei. Membro privado não herda. :$
[/EDITADO]
Meses atrás houve um grande debate entre alguns amigos sobre a seguinte questão:Afinal, métodos e propriedades privados em java, são herdados pelas classes-filhas?
Tem gente que acredita que herda, tem gente que acredita que não herda e tem gente que não acha nada!
Estou no grupo que acredita que herda!
Qualquer membro que tenha sua visibilidade marcada como private, é herdada pelas classes-filhas.Porém, somente a classe onde o membro foi declarado terá acesso (devido ao tipo visibilidade).
Este é um bom assunto para juntar um grupo de amigos e discutir. Certamente iniciará uma Flame War :X
Vou tentar convencer vocês a acreditarem que herda .
Retirado do wikipédia, de forma resumida, o conceito de herança é:
“A Herança é um princípio da Programação Orientada a Objetos que permite que as classes compartilhem atributos e operações baseados em um relacionamento, geralmente generalização. A herança permite a criação de subclasses que herdam atributos e operações (ou Métodos) da classe pai (super-classe ou classe base) “
Do meu ponto de vista, o que ocorre, em Java especificamente, é o seguinte:
Herança é uma coisa, e escopo de um membro é outra. Quando tornamos um membro “private”, estamos falando que o seu escopo é apenas dentro da própria classe. O que é totalmente diferente de: Os objetos das classes-filhas não herdaram este(s) membro(s).
O grupo que acha que não herda alega que as propriedades não estão presentes na classe filha, não são visíveis.
Durante a “discussão” herda, não herda, nos deparamos com opiniões de outras pessoas. Vimos que toda a estrutura das classes são alocadas em memória e prontas para serem utilizadas pelos mecanismos internos da classe. Ou seja, os membros estão lá. É fato que não é possível acessar de forma direta os membros privados da superclasse, a não ser que seja via reflexão. O que foge da discussão aqui.
Uma outra coisa que é legal comentar é que, não existe polimorfismo com membros privados. Caso exista um membro de mesmo nome nas classes-filhas, este será apenas um novo membro com escopo diferente.
Este, talvez, seja o motivo da GRANDE confussão, já que quando estamos implementando a classe-filha temos a sensação de que os membros privados não são herdados.


Recent Comments