Por que eu devo ler este artigo:O artigo trata de como devemos manipular a criação de métodos construtores na linguagem Java. Citamos as regras necessárias que não devem ser esquecidas quando os criamos e trabalhamos com eles através de herança.

Em Java, todas as classes, incluindo classes abstratas, necessitam pelo menos de um construtor. Através do construtor o desenvolvedor terá acesso à classe, às suas variáveis e métodos. Os construtores sempre serão chamados em tempo de execução e disponibilizarão a criação de um objeto desta classe.

Criando Construtores

Vamos agora aprender a criar construtores em uma classe e entender quais são as regras de execução deles. É muito importante que o desenvolvedor entenda como a execução de um código funcionará através da criação de um ou mais construtores na classe e também a relação existente entre construtores da superclasse com construtores de suas subclasses. Você deve ter sempre em mente que toda classe em Java deve ter pelo menos um método construtor, por isso é tão importante entender como eles funcionam.

Classe com construtor implícito

Chamamos de explícito um construtor que seja declarado pelo desenvolvedor, ou seja, esteja visível no código fonte. Quando este não está visível no código fonte, o chamamos de implícito e neste caso será criado pelo compilador. Na Listagem 1, o construtor não será criado, assim, o compilador irá gerá-lo implicitamente.

Listagem 1. Classe com construtor implícito

package javamagazine.listagem1;
   
  public class Animal {
      private double peso;
      private String grupo;
      // gerar getters e setters
      public static void main(String[] args) {
          Animal animal = new Animal();
          animal.setPeso(5.5);
          animal.setGrupo("Mamiferos");
          System.out.println("Peso: " + animal.getPeso() + 
            " Grupo: " + animal.getGrupo());
      }
}

O que aconteceu na Listagem 1?

Primeiro criamos uma classe chamada Animal, e em seguida duas variáveis de instância, peso e grupo. No método main() foi declarada uma variável de referência chamada animal, do tipo Animal e atribuído a ela um objeto do tipo Animal. Quando utilizamos o comando new Animal(), “mandamos” construir este objeto e atribui-lo à variável de referência. Teremos então acesso a todos os métodos e variáveis da classe Animal, através da variável animal.

Mesmo sem declarar um construtor explicitamente, esse código não gera nenhum erro de compilação ou de execução, porque como já foi dito, o compilador se encarregará de criá-lo.

Classe com construtor explícito

Se quiséssemos declarar outro construtor, que possuísse como argumento um valor correspondente a peso e outro correspondente a grupo, conforme a Listagem 2, precisaríamos então obrigatoriamente declarar o construtor padrão se quiséssemos utilizá-lo, senão, ocorreria um erro de compilação referente à linha que possui a instrução new Animal().

Sempre que um construtor com argumentos for declarado, o compilador deixará de criar o construtor padrão, então devemos criá-lo explicitamente caso seja preciso utilizá-lo.

Listagem 2. Classe com construtor explícito

package javamagazine.listagem2;
   
public class Animal {
    private double peso;
    private String grupo;
    //gerar getters and setters
 
    public Animal() {
    //padrão
    }
 
    public Animal(double peso, String grupo) {
        super();
        this.peso = peso;
        this.grupo = grupo;
    }
 
    public static void main(String[] args) {
        Animal a = new Animal();
        a.setPeso(5.5);
        a.setGrupo("Mamiferos");
        System.out.println("Peso: " + a.getPeso() + " Grupo: " + a.getGrupo());
        Animal b = new Animal(6.0, "Aves");
        System.out.println("Peso: " + b.getPeso() + " Grupo: " + b.getGrupo());
    }
}

Na Listagem 2, foram declarados dois construtores. O primeiro deles, com o comentário “padrão”, possibilita criar o objeto a e o segundo o objeto b. O segundo construtor, com a lista de argumentos, nos permite criar um objeto e atribuir a este valores em tempo de criação, sem precisar utilizar o método set(), referente a cada variável de instância, como foi feito na utilização do construtor padrão.

A chamada a super() é um padrão implícito em qualquer construtor. Não precisa ser feita. No entanto, caso seja utilizada, ela deve ser a primeira instrução dentro do construtor. Veja que na Listagem 2 o construtor padrão não possui uma chamada a ...

Quer ler esse conteúdo completo? Tenha acesso completo