Blog Formação DEV

Herança de Classes em Java

Existem alguns pilares essenciais para se dominar na programação orientada a objetos e um deles é a herança. Aprenda como usar a herança de forma otimizada e bem planejada.
Herança de Classes em Java
Texto de: Geraldo Daros

Introdução

A herança em Java é um mecanismo no qual um objeto adquire propriedades e comportamentos de um objeto pai. A ideia por trás a herança de classes em Java, é que você possa criar novas classes construídas sobre classes que já existem. Portanto, ao herdar de uma classe existente, você pode reutilizar métodos e atributos que não sejam privados da classe pai. Além disso, você também pode adicionar novos métodos e campos em sua classe atual.

Antes de irmos mais a fundo na herança, existem alguns termos que precisamos ter em mente:

Subclasse/classe filha: subclasse é uma classe que herda de 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:

Nós temos 3 tipos de herança em Java: herança simples, herança multinível e herança hierárquica. Veremos todos esses tipos de herança com mais detalhes ao longo desse artigo.

Sintaxe

Para declarar que uma classe estende de outra, adicionamos a palavra reservada extends seguida do nome da classe que será estendida logo após o nome da classe que realizará a extensão, na própria definição da classe.

Definição normal de uma classe:

public class Gato {

}

Faremos então uma classe chamada Animal para fazer Gato estender de Animal. Para isso acontecer temos que adicionar o texto extends [nome da classe] ou seja, extends Animal na definição da classe Gato. Da seguinte forma:

 public class Gato extends Animal{

 }

Essa é a forma da sintaxe para o uso da herança.

Herança simples

Vamos começar por uma demonstração básica sobre a Herança simples.

Primeiro, criaremos uma classe Animal que tem um atributo peso, e um método chamado dormir.

 class Animal {
   private Double peso;
   public void dormir(){}
   public Double getPeso(){return peso;};
  }

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 uma herança (está estendendo da classe Animal) e recebendo os métodos e atributos da superclasse por meio disso.

 public class Gato extends Animal{

 } 

Agora, na nossa classe de teste dentro do método Main, estamos instanciando um Gato e fizemos os testes para ver se ele recebeu realmente as Heranças.

Nessa imagem acima, temos a classe Gato declarada sem absolutamente nenhum atributo, mas fizemos ela estender de Animal, que por sua vez, possui atributos e funcionalidades.

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:

public class Teste {
  public static void main(String[] args){
    GatoFilhote gatoFilhote = new GatoFilhote();
    gatoFilhote.comer();
    gatoFilhote.miar();
  }
}

class Gato extends Animal {
  public void miar(){}
}

class GatoFilhote extends Gato {}

class Animal {
  public void comer(){}
}

Aqui temos uma classe Gato e ela estende Animal e logo depois temos a classe GatoFilhote que estende Gato. Nesse caso, Gato vai herdar de Animal e 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 as suas classes filhas. Então uma instância de GatoFilhote tem acesso aos atributos e comportamentos de Gato e Animal, como visto no exemplo o acesso ao método miar() de Gato e comer() de Animal. Um exemplo mais familiar é considerar as classes Animal como avô, Gato como pai e GatoFilhote como filho.

Herança Hierárquica

A hierarquia de herança é um conceito em que uma classe "pai" contém mais de uma classe "filha". Um exemplo ilustrativo seria a classe Animal em um sistema que gerencia diversas espécies animais. Embora todos os animais pertençam à categoria geral de animais, como gatos, papagaios, cachorros, etc., na modelagem do sistema, podemos criar uma classe que atua como a "classe pai" para todos os tipos de animais.

Dessa forma, a classe Animal serviria como a base comum, fornecendo atributos e comportamentos compartilhados por todos os animais, tais como espécie, peso, cor, data de nascimento, habitat natural, alimentação, entre outros. Todos os animais, por sua vez, estenderiam a classe Animal, herdados esses atributos essenciais. Isso elimina a necessidade de replicar manualmente essas características em cada uma das inúmeras espécies de animais no sistema.

Para ilustrar esse conceito, vejamos um exemplo prático no código-fonte:

public class Teste {
  public static void main (String[] args){
    Gato gato = new Gato();
    Jacare jacare = new Jacare();
    Cobra cobra = new Cobra();
    Sucuri sucuri = new Sucuri();
   }
}

class Gato extends Animal{}
class jacare extends Animal {}
class Cobra extends Animal {}
class sucuri extends Cobra {}

class Animal {
  private String especie;
  private Double peso;
  private String cor;
  private Date dataNascimento;
  private String habitatNatural;
  private String alimentacao;

  // Contrutores, getters e setters omitidos para simplificar o exemplo
} 

   

Nesse código nós podemos observar que, temos 3 classes estendendo a classe Animal, isso significa que estamos fazendo o uso da herança hierárquica. Também usamos a herança multinível, no momento em que temos Cobra estendendo a classe Animal e Sucuri estendendo Cobra.

Conclusão

Nesse artigo nós vimos as principais formas de herança de classes com Java e como utilizá-las, de forma bem simples para que você possa utilizar e fazer seus próprios exemplos. Saber utilizar herança traz vários benefícios para nosso código como: reutilização, organização e estruturação, manutenção e compreensão do código.

Sobre o autor
Cod3r

Cod3r

Com mais de 400 mil alunos, a Cod3r é uma das principais escolas de tecnologia do País. Um de seus produtos mais importantes é a Formação DEV, com objetivo de preparar os profissionais para o mercado.

Ótimo! Inscreveu-se com sucesso.

Bem-vindo de volta! Registou-se com sucesso.

Assinou com sucesso o Blog Formação DEV .

Sucesso! Verifique o seu e-mail para obter o link mágico para se inscrever.

As suas informações de pagamento foram atualizadas.

Seu pagamento não foi atualizado.