Sobrecarga do construtor em Java

O que รฉ sobrecarga de construtor em Java?

Java A sobrecarga de construtor รฉ uma tรฉcnica na qual uma classe pode ter qualquer nรบmero de construtores que diferem na lista de parรขmetros. O compilador diferencia esses construtores levando em consideraรงรฃo o nรบmero de parรขmetros na lista e seu tipo.

Exemplos de construtores vรกlidos para a classe Account sรฃo

Account(int a);
Account (int a,int b);
Account (String a,int b);

Exemplo 2: Para entender a sobrecarga do construtor em Java

Passo 1) Digite o cรณdigo no editor.

class Demo{
      int  value1;
      int  value2;
      /*Demo(){
       value1 = 10;
       value2 = 20;
       System.out.println("Inside 1st Constructor");
     }*/
     Demo(int a){
      value1 = a;
      System.out.println("Inside 2nd Constructor");
    }
    Demo(int a,int b){
    value1 = a;
    value2 = b;
    System.out.println("Inside 3rd Constructor");
   }
   public void display(){
      System.out.println("Value1 === "+value1);
      System.out.println("Value2 === "+value2);
  }
  public static void main(String args[]){
    Demo d1 = new Demo();
    Demo d2 = new Demo(30);
    Demo d3 = new Demo(30,40);
    d1.display();
    d2.display();
    d3.display();
 }
}

Passo 2) Salve, compile e execute o cรณdigo.

Passo 3) Erro = ?. Tente depurar o erro antes de prosseguir para a prรณxima etapa do Java sobrecarga do construtor

Passo 4) Cada classe tem um padrรฃo Construtor em Java. Construtor sobrecarregado padrรฃo Java pela aula de demonstraรงรฃo is Demonstraรงรฃo(). Caso vocรช nรฃo forneรงa este construtor, o compilador o cria para vocรช e inicializa as variรกveis โ€‹โ€‹com os valores padrรฃo. Vocรช pode optar por substituir esse construtor padrรฃo e inicializar as variรกveis โ€‹โ€‹com os valores desejados, conforme mostrado no Exemplo 1.

Mas se vocรช especificar um construtor parametrizado como Demo(int a) e quiser usar o construtor padrรฃo Java Demo(), รฉ obrigatรณrio especificรก-lo.

Em outras palavras, caso seu construtor de sobrecarga em Java รฉ substituรญdo e vocรช deseja usar o construtor padrรฃo Java, รฉ necessรกrio especificรก-lo.

Passo 5) Remova o comentรกrio da linha 4-8. Salve, compile e execute o cรณdigo.

Por que precisamos de sobrecarga de construtor em Java?

Sobrecarga do construtor em Java permite mรบltiplos construtores em uma classe, cada um tendo listas de parรขmetros diferentes. Ele aumenta a flexibilidade e melhora a eficiรชncia do cรณdigo.

  • Flexibilidade na criaรงรฃo de objetos: A sobrecarga do construtor permite inicializar objetos de vรกrias maneiras, dependendo do nรบmero ou tipo de parรขmetros.
  • Reutilizaรงรฃo de cรณdigo: Vocรช pode reutilizar a lรณgica do construtor chamando um construtor de outro usando a palavra-chave this().
  • Legibilidade aprimorada: Construtores sobrecarregados ajudam a tornar o cรณdigo mais intuitivo, oferecendo opรงรตes de construtor especรญficas para diferentes necessidades de inicializaรงรฃo.
  • Inicializaรงรฃo padrรฃo e personalizada: A sobrecarga do construtor permite que vocรช crie objetos padrรฃo e personalizados facilmente.

Perguntas

Construtor รฉ um mรฉtodo especial usado para inicializar um objeto recรฉm-criado e รฉ chamado logo apรณs a memรณria ser alocada para o objeto. Ele pode ser usado para inicializar os objetos com os valores desejados ou valores padrรฃo no momento da criaรงรฃo do objeto. Nรฃo รฉ obrigatรณrio para o codificador escrever um construtor para uma classe.

Se nenhum construtor definido pelo usuรกrio for fornecido para uma classe, o compilador inicializa as variรกveis โ€‹โ€‹de membro com seus valores padrรฃo.

  • tipos de dados numรฉricos sรฃo definidos como 0
  • tipos de dados char sรฃo definidos como caractere nulo ('\0')
  • variรกveis โ€‹โ€‹de referรชncia sรฃo definidas como nulas

  1. Tem o mesmo nome como a classe
  2. Nรฃo deve retornar um valor nem mesmo anular

Exemplo 1: Crie seu primeiro construtor em Java

Passo 1) Digite o seguinte programa construtor em Java editor.

class Demo{
      int  value1;
      int  value2;
      Demo(){
         value1 = 10;
         value2 = 20;
         System.out.println("Inside Constructor");
     }
 
     public void display(){
        System.out.println("Value1 === "+value1);
        System.out.println("Value2 === "+value2);
    }
 
   public static void main(String args[]){
       Demo d1 = new Demo();
      d1.display();
  }
}

Passo 2) Salve, execute e compile o programa construtor em Java e observe a saรญda.

Resultado esperado:

Inside Constructor
Value1 === 10
Value2 === 20

Considere um cenรกrio em que uma classe base รฉ estendida por um filho. Sempre que um objeto da classe filha รฉ criado, o construtor da classe pai รฉ invocado primeiro. Isso รฉ chamado Encadeamento de construtor.

3 exemplo: Para entender o encadeamento de construtores

Passo 1) Copie o cรณdigo a seguir no editor.

class Demo{
   int  value1;
   int  value2;
    Demo(){
      value1 = 1;
      value2 = 2;
      System.out.println("Inside 1st Parent Constructor");
   }
   Demo(int a){
      value1 = a;
      System.out.println("Inside 2nd Parent Constructor");
   }
  public void display(){
     System.out.println("Value1 === "+value1);
     System.out.println("Value2 === "+value2);
  }
  public static void main(String args[]){
     DemoChild d1 = new DemoChild();
     d1.display();
  }
}
class DemoChild extends Demo{
    int value3;
    int value4;
    DemoChild(){
    //super(5);
     value3 = 3;
     value4 = 4;
    System.out.println("Inside the Constructor of Child");
    }
    public void display(){
      System.out.println("Value1 === "+value1);
      System.out.println("Value2 === "+value2);
      System.out.println("Value1 === "+value3);
      System.out.println("Value2 === "+value4);
   }
}

Passo 2) Execute o cรณdigo. Devido ao encadeamento de construtores, quando o objeto da classe filho DemoChild รฉ criado, o construtor Demo() da classe pai รฉ invocado primeiro e depois o construtor DemoChild() do filho รฉ criado.

Resultado esperado:

Inside 1st Parent Constructor
Inside the Constructor of Child
Value1 === 1
Value2 === 2
Value1 === 3
Value2 === 4

Passo 3) Vocรช pode observar que o construtor da classe pai Demo foi substituรญdo. E se vocรช quiser chamar o construtor substituรญdo Demo(int a) em vez do construtor padrรฃo Demo() quando seu objeto filho for criado?

Nesses casos, vocรช pode usar a palavra-chave "super" para chamar construtores substituรญdos da classe pai.

Sintaxe:-

super();
--or--
super(parameter list);

Exemplo: Se o seu construtor for como Demonstraรงรฃo(Nome da String,int a), vocรช especificarรก super("Javaโ€,5). Se usada, a palavra-chave super precisa ser a primeira linha do cรณdigo no construtor da classe filha.

Passo 4) Remova o comentรกrio da linha 26 e execute o cรณdigo. Observe a saรญda.

Saรญda:

Inside 2nd Parent Constructor
Inside the Constructor of Child
Value1 === 5
Value2 === 0
Value1 === 3
Value2 === 4

Resuma esta postagem com: