상속에서 Java 생성자의 실행

Mehvish Ashiq 2024년2월15일
  1. 상속에서 Java 생성자의 실행
  2. 상속에서 기본 Java 생성자의 실행
  3. 상위 클래스에 기본 생성자 및 매개변수화된 생성자가 있는 경우 상속에서 Java 생성자 실행
  4. super를 사용하여 상위 클래스와 모든 하위 클래스의 매개변수화된 생성자를 호출합니다
상속에서 Java 생성자의 실행

오늘은 상속에서 자바 생성자의 실행에 대해 알아보겠습니다. 파생 클래스(자식 클래스 및 하위 클래스라고도 함)에서 기본 및 매개 변수화된 생성자의 코드 예제를 볼 수 있습니다.

상속에서 Java 생성자의 실행

이 기사를 계속하려면 상속에 대한 충분한 지식이 필요합니다. 이 튜토리얼을 읽고 있다면 Java 상속에 대해 확실히 이해하고 있다고 가정합니다.

extens 키워드를 사용하여 상위 클래스(기본 클래스 또는 수퍼 클래스라고도 함)를 확장하는 동안 Java 생성자의 실행 프로세스에 대해 알아보겠습니다.

상속에서 기본 Java 생성자의 실행

예제 코드:

class parentClass {
  parentClass() {
    System.out.println("Default constructor of the parent class.");
  }
}

class childClass extends parentClass {
  childClass() {
    System.out.println("Default constructor of the child class.");
  }
}

class grandChildClass extends childClass {
  grandChildClass() {
    System.out.println("Default constructor of the grand child class.");
  }
}

public class constructorsInInheritance {
  public static void main(String[] args) {
    grandChildClass obj = new grandChildClass();
  }
}

출력:

Default constructor of the parent class.
Default constructor of the child class.
Default constructor of the grand child class.

여기에 grandChildClass 객체를 생성하는 constructorsInInheritance라는 테스트 클래스가 하나 있습니다.

parentClass, childClass, grandChildClass라는 세 개의 다른 클래스가 있습니다. 여기서 grandChildClasschildClass를 상속하고 childClassparentClass를 확장합니다.

여기에서 parentClass 기본 생성자는 childClass 생성자에 의해 자동으로 호출됩니다. 자식 클래스를 인스턴스화할 때마다 부모 클래스의 생성자가 자동으로 실행되고 그 다음에 자식 클래스의 생성자가 실행됩니다.

위에 주어진 출력을 관찰하십시오. 여전히 혼란스럽다면 다음 시각적 설명을 참조하십시오.

상속에서 Java 생성자의 실행 - 시각적 설명

main 메소드에서 childClass의 객체를 생성하면 어떻게 될까요? 이제 기본 생성자가 어떻게 실행됩니까?

parentClass의 생성자가 먼저 실행되고 childClass의 생성자가 다음 결과를 생성합니다.

출력:

Default constructor of the parent class.
Default constructor of the child class.

상위 클래스에 기본 생성자 및 매개변수화된 생성자가 있는 경우 상속에서 Java 생성자 실행

예제 코드:

class parentClass {
  parentClass() {
    System.out.println("Default constructor of the parent class.");
  }
  parentClass(String name) {
    System.out.println("Hi " + name + "! It's a parameterized constructor of the parent class");
  }
}

class childClass extends parentClass {
  childClass() {
    System.out.println("Default constructor of the child class.");
  }
}

class grandChildClass extends childClass {
  grandChildClass() {
    System.out.println("Default constructor of the grand child class.");
  }
}

public class constructorsInInheritance {
  public static void main(String[] args) {
    grandChildClass obj = new grandChildClass();
  }
}

출력:

Default constructor of the parent class.
Default constructor of the child class.
Default constructor of the grand child class.

여기 parentClass에 매개변수화된 생성자가 있습니다. 그러나 기본 생성자는 main 메소드에서 grandChildClass() 기본 생성자를 호출하고 상위 클래스 기본 생성자를 추가로 호출하기 때문에 계속 호출됩니다.

childClassgrandChildClass에 매개변수화된 생성자를 작성해 보겠습니다. 그런 다음 main 함수에서 grandChildClass의 매개변수화된 생성자를 호출합니다.

기본 생성자이든 매개변수화 생성자이든 상관없이 어떤 생성자가 호출되는지 관찰하십시오.

예제 코드:

class parentClass {
  parentClass() {
    System.out.println("Default constructor of the parent class.");
  }
  parentClass(String name) {
    System.out.println("Hi " + name + "! It's a parameterized constructor of the parent class");
  }
}

class childClass extends parentClass {
  childClass() {
    System.out.println("Default constructor of the child class.");
  }
  childClass(String name) {
    System.out.println("Hi " + name + "! It's a parameterized constructor of the child class");
  }
}

class grandChildClass extends childClass {
  grandChildClass() {
    System.out.println("Default constructor of the grand child class.");
  }
  grandChildClass(String name) {
    System.out.println(
        "Hi " + name + "! It's a parameterized constructor of the grand child class");
  }
}

public class constructorsInInheritance {
  public static void main(String[] args) {
    grandChildClass obj = new grandChildClass("Mehvish");
  }
}

출력:

Default constructor of the parent class.
Default constructor of the child class.
Hi Mehvish! It's a parameterized constructor of the grand child class

위의 코드는 grandChildClass의 매개변수화된 생성자만 호출합니다. super()를 사용하여 parentClass, childClassgrandChildClass의 매개변수화된 생성자를 호출합니다.

부모 클래스 생성자 호출은 자식 클래스 생성자의 첫 번째 줄에 있어야 한다는 것을 기억하십시오.

super를 사용하여 상위 클래스와 모든 하위 클래스의 매개변수화된 생성자를 호출합니다

예제 코드:

class parentClass {
  parentClass() {
    System.out.println("Default constructor of the parent class.");
  }
  parentClass(String name) {
    System.out.println("Hi " + name + "! It's a parameterized constructor of the parent class");
  }
}

class childClass extends parentClass {
  childClass() {
    System.out.println("Default constructor of the child class.");
  }
  childClass(String name) {
    super(name);
    System.out.println("Hi " + name + "! It's a parameterized constructor of the child class");
  }
}

class grandChildClass extends childClass {
  grandChildClass() {
    System.out.println("Default constructor of the grand child class.");
  }
  grandChildClass(String name) {
    super(name);
    System.out.println(
        "Hi " + name + "! It's a parameterized constructor of the grand child class");
  }
}

public class constructorsInInheritance {
  public static void main(String[] args) {
    grandChildClass obj = new grandChildClass("Mehvish");
  }
}

출력:

Hi Mehvish! It's a parameterized constructor of the parent class
Hi Mehvish! It's a parameterized constructor of the child class
Hi Mehvish! It's a parameterized constructor of the grand child class

super 키워드를 사용하여 매개변수화된 상위 클래스 생성자를 호출했습니다. 상위 클래스(수퍼 클래스 또는 기본 클래스)를 참조합니다.

우리는 그것을 사용하여 부모 클래스 생성자에 액세스하고 부모 클래스 메서드를 호출했습니다.

super는 부모 및 자식 클래스의 정확한 이름을 가진 메서드에 매우 유용합니다.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

관련 문장 - Java Inheritance