A herança em programação orientada a objetos permite que uma classe (chamada de classe filha ou subclasse) herde características e comportamentos de outra classe (chamada de classe pai ou superclasse). Essa relação é fundamental para a reutilização de código e a criação de hierarquias de classes.
Quando falamos sobre o nível de encapsulamento (ou visibilidade) dos atributos e métodos em uma classe, estamos nos referindo aos modificadores de acesso que podem ser aplicados a esses elementos. Existem três modificadores principais em Java:
- Public (
public
):- Os membros (atributos e métodos) declarados como
public
são acessíveis por qualquer classe. Eles podem ser herdados pelas subclasses.
- Os membros (atributos e métodos) declarados como
- Protected (
protected
):- Os membros declarados como
protected
são acessíveis pela classe em si, suas subclasses e por classes do mesmo pacote. Eles também podem ser herdados pelas subclasses.
- Os membros declarados como
- Private (
private
):- Os membros declarados como
private
são acessíveis apenas pela classe em que são declarados. Eles não são visíveis para subclasses.
- Os membros declarados como
A afirmação “Só podem ser herdados elementos de uma classe que estejam encapsulados a partir dos tipos public e protected. Elementos encapsulados com tipo private não são passados na definição de herança” (MANZANO 2014) destaca a relação entre encapsulamento e herança:
- Public e Protected: Membros
public
eprotected
são visíveis para as subclasses e podem ser herdados. - Private: Membros
private
não são visíveis para as subclasses e, portanto, não são herdados. Isso significa que, embora a classe filha possa ter uma relação de herança com a classe pai, ela não tem acesso direto aos membrosprivate
da classe pai.
Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
public class ClassePai { public int atributoPublico; protected int atributoProtegido; private int atributoPrivado; public void metodoPublico() { // código aqui } protected void metodoProtegido() { // código aqui } private void metodoPrivado() { // código aqui } } public class ClasseFilha extends ClassePai { // Acesso permitido aos membros public e protected da ClassePai public void exemploMetodo() { atributoPublico = 10; atributoProtegido = 20; // atributoPrivado e metodoPrivado não são acessíveis aqui } } |
Neste exemplo, a ClasseFilha
herda os membros public
e protected
da ClassePai
, mas não tem acesso direto aos membros private
da ClassePai
. O encapsulamento ajuda a controlar a visibilidade e o acesso aos membros, garantindo a integridade do código e facilitando a manutenção.
—
*Atualizado em 17 de dezembro de 2023