GeeksforGeeks

pré-requisito-Construtores em Java
encadeamento do construtor é o processo de chamar um construtor de outro construtor em relação ao objeto atual.
o encadeamento do construtor pode ser feito de duas formas:

  • dentro da mesma classe: pode ser feito usando esta palavra-chave() para construtores da mesma classe
  • da classe base: usando a palavra-chave super () para chamar construtor da classe base.

a encadernação do Construtor ocorre por herança. A tarefa de um construtor de classe inferior é chamar o construtor de classe superior em primeiro lugar. Isto garante que a criação do objeto da sub classe começa com a inicialização dos membros de dados da super classe. Pode haver um número de classes na cadeia sucessória. Todos os construtores ligam para a cadeia até a classe no topo ser alcançada.

por que precisamos de acorrentamento do construtor ?
este processo é usado quando queremos realizar várias tarefas em um único construtor em vez de criar um código para cada tarefa em um único construtor, criamos um construtor separado para cada tarefa e fazer sua cadeia que torna o programa mais legível.

encadeamento do Construtor dentro da mesma classe usando esta palavra-chave() :

Construtor De Encadeamento Em Java

class Temp
{
Temp()
{
this(5);
System.out.println("The Default constructor");
}
Temp(int x)
{
this(5, 15);
System.out.println(x);
}
Temp(int x, int y)
{
System.out.println(x * y);
}
public static void main(String args)
{
new Temp();
}
}



Saída:Regras de encadernação do construtor:

  1. esta expressão() deve ser sempre a primeira linha do construtor.
  2. deve haver pelo menos um construtor sem a palavra-chave () (construtor 3 no exemplo acima).
  3. a encadernação do construtor pode ser alcançada em qualquer ordem.

O Que Acontece se mudarmos a ordem dos construtores?

Nada, Construtor de encadeamento pode ser alcançado em qualquer ordem

class Temp
{
Temp()
{
System.out.println("default");
}
Temp(int x)
{
this();
System.out.println(x);
}
Temp(int x, int y)
{
this(5);
System.out.println(x * y);
}
public static void main(String args)
{
new Temp(8, 10);
}
}



Saída:

default580

NOTA: No exemplo 1, o construtor padrão é invocado no final, mas no exemplo 2 o construtor padrão é invocado no início. Assim, a ordem na cadeia de encadeamento construtor não é importante.

encadeamento do construtor para outra classe utilizando a palavra-chave super() :

class Base
{
String name;
Base()
{
this("");
System.out.println("No-argument constructor of" +
" base class");
}
Base(String name)
{
this.name = name;
System.out.println("Calling parameterized constructor"
+ " of base");
}
}
class Derived extends Base
{
Derived()
{
System.out.println("No-argument constructor " +
"of derived");
}
Derived(String name)
{
super(name);
System.out.println("Calling parameterized " +
"constructor of derived");
}
public static void main(String args)
{
Derived obj = new Derived("test");
}
}



Saída:

Calling parameterized constructor of baseCalling parameterized constructor of derived

Nota : Semelhante ao construtor de encadeamento na mesma classe, super() deve ser a primeira linha do construtor como super construtor da classe são chamados antes de o sub construtor da classe.

método alternativo: usando o bloco Init:
quando queremos que certos recursos comuns sejam executados com cada Construtor, podemos colocar o código no bloco init. O bloco Init é sempre executado antes de qualquer construtor, sempre que um construtor é usado para criar um novo objecto.Exemplo 1:

class Temp
{
{
System.out.println("init block");
}
Temp()
{
System.out.println("default");
}
Temp(int x)
{
System.out.println(x);
}
public static void main(String args)
{
new Temp();
new Temp(10);
}
}



Saída:

init blockdefaultinit block10

NOTA: Se houver mais de um dos blocos, eles são executados na ordem em que eles são definidos dentro de uma mesma classe. Vê a ex.
exemplo :

class Temp
{
{
System.out.println("init");
}
Temp()
{
System.out.println("default");
}
Temp(int x)
{
System.out.println(x);
}
{
System.out.println("second");
}
public static void main(String args)
{
new Temp();
new Temp(10);
}
}



Saída :

initseconddefaultinitsecond10

Este artigo é uma contribuição de Apoorva singh. Se você gosta de GeeksforGeeks e gostaria de contribuir, Você também pode escrever um artigo usando contribuir.geeks forgeeks.org ou enviar o seu artigo para [email protected]. veja o seu artigo que aparece na página principal dos GeeksforGeeks e ajuda outros Geeks.

Deixe uma resposta

O seu endereço de email não será publicado.