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() :
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:
- esta expressão() deve ser sempre a primeira linha do construtor.
- deve haver pelo menos um construtor sem a palavra-chave () (construtor 3 no exemplo acima).
- 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.