Java에서 다른 생성자 호출

Rupam Yadav 2023년10월12일
  1. Java의 동일한 클래스 내에서 다른 생성자에서 하나의 생성자 호출
  2. Java의 기본 클래스에서 다른 생성자에서 하나의 생성자 호출
Java에서 다른 생성자 호출

Java에서는 객체 초기화시 생성자를 호출하는 순서를 생성자 체인이라고합니다. 하나의 인스턴스를 사용하여 하나의 생성자를 차례로 호출하려고 할 때 사용됩니다.

Java의 동일한 클래스 내에서 다른 생성자에서 하나의 생성자 호출

동일한 클래스 내의 다른 생성자에서 하나의 생성자를 호출하려면this 키워드를 사용합니다. this 키워드를 사용하는 표현식은 생성자의 첫 번째 행이어야합니다. 순서는 생성자 체인에서 중요하지 않습니다. this 키워드를 사용하지 않는 생성자가 하나 이상 있어야합니다.

아래 예제에는 생성자가 3 개인Test 클래스가 있습니다. 하나는 매개 변수가없는 기본 매개 변수이고 다른 두 개는 매개 변수화됩니다. main 메소드에서 매개 변수를 전달하지 않고new 키워드로 클래스 객체를 인스턴스화합니다.

this("Steve")를 사용하여 매개 변수화 된 생성자Test(String name)로 호출을 리디렉션하는 기본 생성자Test()를 호출합니다. 생성자Test(String name)this(30,"Texas")를 사용하여 매개 변수화 된 다른 생성자Test(int age, String place)로 호출을 추가로 리디렉션합니다.

Test(int age, String place)내부의 문이 먼저 실행됩니다. 그 후Test(String name)생성자의 나머지 명령문이 실행됩니다. 마지막으로 기본 생성자의 나머지 문이 실행되고 개체가 성공적으로 초기화됩니다.

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();
  }
}

출력:

Age- 30, place- Texas
Name - Steve
Default Constructor

Java의 기본 클래스에서 다른 생성자에서 하나의 생성자 호출

상속 관계가있는 클래스가 둘 이상있는 경우super 키워드를 사용하여 자식 클래스에서 부모 클래스 생성자를 호출해야합니다. this 키워드와 달리 JVM은 자동으로super 키워드를 넣습니다.

기본 클래스는 파생 클래스에 의해 확장되는 부모 클래스입니다. 클래스 객체를 인스턴스화하는 메인 메서드는 동일한 클래스의 기본 생성자를 호출하며,이 생성자는this("Adam")을 사용하여 호출을 하위 클래스의 매개 변수화 된 생성자로 추가로 리디렉션합니다.

super(name)Base 클래스의 매개 변수화 된 생성자Base(String name)를 호출합니다. Base 클래스의 기본 생성자는this()를 사용하여 호출됩니다. 클래스 변수는 여기서this.name = name을 사용하여 초기화됩니다.

Base 클래스 기본 생성자 내의 코드가 실행됩니다. 나중에 매개 변수화 된 생성자Base(String name)내부의 명령문이 실행됩니다. 마지막으로,Derived 클래스의 매개 변수화 된 생성자 내부의 나머지 문이 실행됩니다.

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();
  }
}

출력:

Default Constructor Base Class
Parameterized Constructor Base Class called:- Adam
Parameterized Constructor Derived Class called: Adam
작가: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

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

관련 문장 - Java Constructor