Fala, pessoal. Hoje vamos falar um pouco sobre herança de classe em Java.
Primeiramente, vamos a definição: herança em Java é um mecanismo no qual um objeto adquire propriedades e comportamentos de um objeto pai.
A ideia por trás da herança de classes em Java, é que você pode criar novas classes construídas sobre classes já existentes. Portanto, ao herdar de uma classe existente, você pode reutilizar métodos e atributos da classe pai, não sendo eles privados. Além disso, você também pode adicionar novos métodos e campos em sua classe atual.
Agora temos que entender alguns conceitos:
Subclasse/classe filha: subclasse é uma classe que herda a outra classe. Ela também é chamada de classe derivada, ou seja, ela é uma classe estendida de uma classe pai.
Superclasse /classe pai: superclasse é a classe de onde uma subclasse herda os recursos, e também pode ser chamada de classe base ou classe pai, ou seja, uma classe filha estende a classe pai.
Tipos de Herança
A seguir, alguns tipos de Herança que veremos nesse artigo:
A sintaxe usada para declarar que uma classe estende de outra, é feita na própria declaração da classe começando com uma palavra reservada chamada extends depois do nome da classe, e logo após o nome da classe que será estendida.
Vamos ver um exemplo a seguir:
class (nome da classe) extends (nome da classe que irá ser a classe pai){}
class Cachorro extends Animal{}
Herança simples
Primeiramente, vamos começar por uma demonstração básica sobre a Herança simples.
Na imagem a seguir, nós temos uma classe Animal
que tem um atributo peso, e um método chamado dormir.
Em seguida, criamos a classe Gato
e estendemos Animal
usando o extends
na hora da criação da classe, ou seja, declarando que a classe Gato
está recebendo por herança (está estendendo da classe Animal
) e recebendo seus métodos e atributos por meio disso.
Portanto, na nossa classe de teste dentro do método Main, estamos instanciando um Gato
e fizemos os testes pra ver se ele realmente recebeu as Heranças.
Veja um exemplo a seguir:
Como podemos ver, o gato consegue chamar o método getPeso
e dormir()
e ter acesso ao atributo que recebeu por herança de Animal
, que se torna sua superclasse/Classe pai.
Herança Multinível
Agora, partiremos para um exemplo de Herança Multinível:
Aqui temos uma classe Gato
e ela extends
de Animal
e logo após isso a classe GatoFilhote
extends
de Gato
. Nesse caso, Gato
vai herdar de Animal
e o GatoFilhote
vai herdar de Gato
. Todos os comportamentos e atributos que Gato recebeu por herança, ele também vai passar como herança para o seu filhote.
Um exemplo mais familiar é considerar as classes Animal (Avô) Gato (Pai) GatoFilhote(Filho).
Herança Hierárquica
Nesse momento vamos para outro ambiente, onde será mais complexo e será utilizada também herança.
Uma classe Animal
tem atributos que animais possuem em comum como cor, peso, tamanho, e se é herbívoro ou carnívoro. Isso são características de todos animais, e essa classe também tem métodos que são (ações dos animais em comum), exemplificando comer e dormir.
Então, nesse caso Animal
agora possui duas classes filhas: Cachorro
e Cavalo
, ou seja, estão estendendo de Animal
. Portanto, como Cavalo
e Cachorro
são filhos de Animal
, também terão as mesmas características herdadas como: cor, peso, tamanho, e se é herbívoro ou carnívoro, por exemplo, e também suas ações, comer e dormir. E assim será se outra classe também estender-se de Animal
.
Agora, vamos verificar como isso fica no código. Logo abaixo estão as classes feitas com seus devidos atributos e métodos onde iremos usar herança.
Note que a classe Cavalo
está estendendo de Animal
e Cachorro
. Então, vamos usar isso como exemplo de que os atributos e métodos são realmente recebidos por herança.
Nessas classes, cada uma tem seus métodos e seus atributos. Por causa da herança, toda vez que eles forem instanciadas, a instância terá esses atributos e métodos da própria classe instanciada. Porém, quem extends
uma classe pai, irá receber os atributos e métodos dessa classe também.
Classes declaradas que vamos usar
Observe a seguir:
Agora, o exemplo herança hierárquica usando as classes a que mencionamos acima:
Nesse exemplo, nós temos instâncias de Cavalo
e Cachorro
.
Então vamos relembrar: o Cavalo
está estendendo de Animal
, ou seja, os atributos de animal e seus métodos virão nessa instância criada. Como podemos ver na demonstração, os métodos e atributos de Animal
estão sendo chamados pela instância de cavalo normalmente, já a instância de Cachorro
não consegue ter acesso a isso porque o mesmo não extends
de Animal
.
Também temos uma classe Gato
para demonstração de como uma classe sem absolutamente nada, porém estendendo (extends) de uma classe pai, irá receber seus atributos e métodos como herança, como exemplo, a instância gato chamando métodos de Animal
.
Conclusão
Em síntese, nós vimos as principais formas de herança de classes com Java e como utilizá-las. Também entendemos como funcionam de uma forma simples, rápida e com exemplos em códigos, e (claro) com um dos princípios mais aceitos por toda a comunidade: a reutilização de código.