Chame outro construtor em Java
- Chame um construtor de outro dentro da mesma classe em Java
- Chame um construtor de outro da classe base em Java
Em Java, a sequência de invocação de construtores na inicialização do objeto é chamada de encadeamento de construtor. É usado quando queremos invocar um construtor após o outro usando uma instância.
Chame um construtor de outro dentro da mesma classe em Java
Quando queremos chamar um construtor de outro construtor da mesma classe, usamos a palavra-chave this
. Uma expressão que usa a palavra-chave this
deve ser a primeira linha do construtor. A ordem não importa no encadeamento do construtor. Deve ter pelo menos um construtor que não use a palavra-chave this
.
No exemplo abaixo, temos uma classe Test
que possui 3 construtores. Um é o padrão sem nenhum parâmetro, enquanto os outros dois são parametrizados. No método main
, instanciamos o objeto de classe com a palavra-chave new
sem nenhum parâmetro passado.
Ele invoca o construtor padrão Test()
que redireciona a chamada para o construtor parametrizado Test(String name)
usando this("Steve")
. O construtor Test(String name)
redireciona ainda mais a chamada para o outro construtor parametrizado Test(int age, String place)
usando this(30,"Texas")
.
As instruções dentro de Test(int age, String place)
são executadas primeiro. Depois disso, o resto das instruções do construtor Test(String name)
são executadas. Finalmente, a instrução restante do construtor padrão é executada e o objeto é inicializado com sucesso.
public class Test {
Test() {
this("Steve");
System.out.println("Default Constructor");
}
Test(String name) {
this(30, "Texas");
System.out.println("Name - " + name);
}
Test(int age, String place) {
System.out.println("Age- " + age + ", place- " + place);
}
public static void main(String[] args) {
Test test = new Test();
}
}
Resultado:
Age- 30, place- Texas
Name - Steve
Default Constructor
Chame um construtor de outro da classe base em Java
Quando há mais de uma classe com o relacionamento de herança, precisamos usar a palavra-chave super
para chamar o construtor da classe pai da classe filha. Ao contrário da palavra-chave this
, a JVM coloca automaticamente a palavra-chave super
.
A classe base é a classe pai que é estendida pela classe derivada. O método main no qual instanciamos o objeto de classe invoca o construtor padrão da mesma classe, que redireciona ainda mais a chamada para o construtor parametrizado da classe filha usando this("Adam")
.
super(name)
invoca o construtor parametrizado Base(String name)
da classe Base
. O construtor padrão da classe Base
é invocado usando this()
. A variável de classe também é inicializada aqui usando this.name = name
.
O código dentro do construtor padrão da classe Base
é executado. Posteriormente, as instruções dentro do construtor parametrizado Base(String name)
são executadas. Finalmente, a instrução restante dentro do construtor parametrizado da classe Derived
é executada.
class Base {
String name;
Base() {
System.out.println("Default Constructor Base Class");
}
Base(String name) {
this();
this.name = name;
System.out.println("Parameterized Constructor Base Class called:- " + name);
}
}
class Derived extends Base {
Derived() {
this("Adam");
}
Derived(String name) {
super(name);
System.out.println("Parameterized Constructor Derived Class called: " + name);
}
public static void main(String[] args) {
Derived derived = new Derived();
}
}
Resultado:
Default Constructor Base Class
Parameterized Constructor Base Class called:- Adam
Parameterized Constructor Derived Class called: Adam
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn