O que é Construtor em Java?
CONSTRUCTOR é um método especial usado para inicializar um objeto recém-criado e é chamado logo depois que a memória é 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 inicializará as variáveis de membro com seus valores padrão.
- os tipos de dados numéricos são definidos como 0
- tipos de dados char são definidos para caracteres nulos ('\ 0')
- variáveis de referência são definidas como nulas
Neste tutorial, você aprenderá-
- Regras para criar um construtor
- Sobrecarga de construtor em Java
- Encadeamento de Construtor
Regras para criar um Construtor Java
- Tem o mesmo nome da classe
- Não deve retornar um valor nem mesmo vazio
Exemplo 1 : crie seu primeiro construtor em Java
Etapa 1) Digite o seguinte programa construtor no editor Java.
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();}}
Etapa 2) Salve, execute e compile o programa construtor em Java e observe a saída.
Resultado:
Inside ConstructorValue1 === 10Value2 === 20
Sobrecarga de construtor em Java
A sobrecarga do Construtor Java é 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
Etapa 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();}}
Etapa 2) Salvar, compilar e executar o código.
Etapa 3) Erro =?. Tente depurar o erro antes de prosseguir para a próxima etapa da sobrecarga do construtor Java
Etapa 4) Cada classe tem um Construtor padrão em Java. O construtor Java sobrecarregado padrão para a classe Demo é Demo () . 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 seja sobrescrito e você queira usar o construtor padrão Java, ele precisa ser especificado.
Etapa 5) Retire o comentário da linha 4-8. Salve, compile e execute o código.
Encadeamento de Construtor
Considere um cenário onde uma classe base é estendida por um filho. Sempre que um objeto da classe filha é criado, o construtor da classe pai é chamado primeiro. Isso é chamado de encadeamento de construtor.
Exemplo 3: Para entender o encadeamento do construtor
Etapa 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);}}
Etapa 2) Execute o código. Devido ao encadeamento do construtor, quando o objeto da classe filha DemoChild é criado, o construtor Demo () da classe pai é invocado primeiro e, posteriormente, o construtor DemoChild () da classe filha é criado. Saída esperada =
Inside 1st Parent ConstructorInside the Constructor of ChildValue1 === 1Value2 === 2Value1 === 3Value2 === 4
Etapa 3) Você pode observar que o construtor da classe pai Demo foi sobrescrito. 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 Demo (String Name, 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.
Etapa 4) Remova o comentário da linha 26 e execute o código. Observe a saída.
Resultado:
Inside 2nd Parent ConstructorInside the Constructor of ChildValue1 === 5Value2 === 0Value1 === 3Value2 === 4