Herança é um conceito central na programação orientada a objetos (OOP) e é frequentemente considerado um dos pilares para aumentar a eficiência. Neste tutorial, você aprofundará sua compreensão sobre herança em Java. Você aprenderá como lidar com modificadores de acesso, usar construtores e qual é o papel do encapsulamento na herança.
Principais descobertas
- A herança permite herdar propriedades e métodos de uma classe.
- O modificador de acesso private restringe o acesso às variáveis ou métodos, enquanto protected permite um acesso ampliado dentro de classes que herdam da classe original.
- Construtores devem ser chamados na subclasse para instanciar objetos corretamente.
- Métodos de interface podem ser utilizados de maneira generalizada quando se tem várias classes específicas.
Guia Passo-a-Passo
Modificadores de Acesso: protected vs. private
Se você declarar uma variável (por exemplo, cor) como protected em uma classe como Veículo, poderá usar essa variável diretamente em uma classe derivada (por exemplo, Carro). No entanto, se você declarar a variável como private, não poderá acessá-la diretamente na subclasse.

Isso significa que o acesso a variáveis privadas só é possível através de Setters e Getters.
O exemplo mostra que precisamos usar setCor e getCor para acessar a variável privada cor.

Quando a variável é declarada como protected, você pode acessá-la facilmente dentro da classe Carro e alterar o valor.
Uso de Construtores na Herança
Ao definir uma subclasse, você deve garantir que o construtor da classe pai seja chamado corretamente.

Isso garante que a cor seja inicializada corretamente ao criar um objeto Carro.

Certifique-se de que na subclasse você defina um construtor que passe os parâmetros da classe pai adequadamente.
Herança e Chamadas de Métodos
Duas classes, Veículo e Carro, permitem o uso de variáveis e métodos gerais. Se você definir um método em Veículo, pode usar esse método também em Carro, sem precisar reescrevê-lo.

Aqui, o método imprimirCorVeiculo é chamado e exibe o valor da cor fornecido pelo método getCor.
Restrições ao Acesso a Métodos
Se você tentar chamar um método em uma subclasse que não está disponível para a classe, receberá um erro de compilação. No nosso exemplo, um objeto Veículo deve ser passado para chamar o método getCor.

Isso significa que você deve garantir que o método corresponda ao seu tipo de dado antes de chamá-lo. Assim, você pode passar uma bicicleta, um carro ou ambos a um método que espera apenas objetos do tipo Veículo.
Exemplo de Chamadas de Métodos de Instância em Contextos Estáticos
Note que em métodos estáticos (static), a palavra-chave this não pode ser usada, pois não se refere a uma instância específica. Nessas situações, considere usar um método diferente ou reestruturar a lógica.

Essa chamada garante que a cor para o objeto meuCarro seja exibida corretamente.
Resumo - Herança em Java: Um Guia para Iniciantes
A herança é um conceito importante na programação em Java, que ajuda você a modularizar e reutilizar o código. Neste tutorial, você aprendeu as fundamentos dos modificadores de acesso, construtores e chamadas de métodos em relação à herança.
Perguntas Frequentes
Como posso acessar variáveis privadas na subclasse?Não é possível acessar variáveis privadas na subclasse diretamente. Use métodos Getter e Setter.
Qual é a diferença entre protected e private?protected permite acesso na subclasse e no mesmo pacote, enquanto private é acessível apenas dentro da própria classe.
Preciso definir os construtores na subclasse?Sim, se você alterou o construtor da classe pai, deve também definir os construtores na subclasse adequadamente.
Posso sobrescrever métodos de classes pai nas subclasses livremente?Sim, você pode sobrescrever métodos que não estão marcados como final ou static na subclasse para implementar comportamento específico.