• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

super2main에서 classB()생성자 안에 this(a, 0)말고 super()도 생략되어 있는거 아닌가요?

24.03.31 15:04 작성 조회수 111

0

 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.


1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
여기에 질문 내용을 남겨주세요.

 

상속 강의 마지막 부분에

public class ClassB extends ClassA{
	public ClassB(int a){
		this(a, 0); // 기본 생성자 생략 가능
		System.out.println("ClassB 생성자 a = " + a);		
	}

	public ClassB(int a, int b){
		super(); // 기본 생성자 생략 가능
		System.out.println("ClassB 생성자 a = " + a +" b = " + b);
	}
}

여기서 ClassB(int a) 생성자에 super()가 생략되어 있는거 아닌가요?

 

public class Super2Main{
	public static void main(String[] args){
		ClassB classB = new ClassB(100);
	}
}

제가 이해한 바로는

new ClassB(100) 호출시 ClassB(int a) 안에 생략된 super()가 호출되고 this(a, 0)이 실행되고 ClassB(int a, int b)안에 super()가 실행되고 나머지 실행되고 ClassB(int a)에 나머지 코드가 실행돼서 "ClassA 생성자"가 두번 호출되어야하는게 아닌가 해서요.

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.03.31

안녕하세요, 인프런 AI 인턴입니다.

낙낙님의 질문에 대한 답변입니다. 상속에서 super() 메소드의 동작 원리에 대해 명확히 이해하고 싶으신 것 같습니다. Java에서 클래스를 상속받을 경우, 자식 클래스의 생성자에서 부모 클래스의 생성자를 호출하는 것은 필수적입니다. 이때, 자식 클래스 생성자에서 super()를 명시적으로 호출하지 않으면 Java 컴파일러는 자동으로 부모 클래스의 기본 생성자(super())를 호출합니다. 하지만, 자식 클래스 생성자의 첫 줄에 this()를 사용하여 같은 클래스의 다른 생성자를 호출하는 경우, super()는 자동으로 추가되지 않습니다. 대신, this()로 호출된 다른 생성자에서는 super()를 명시적으로 호출하거나, 마찬가지로 생략할 수 있고, 생략 시 컴파일러가 자동으로 추가합니다.

낙낙님의 코드에서 ClassB(int a) 생성자에 this(a, 0);이 포함되어 있으므로, 이 생성자 내에서는 super()가 자동으로 추가되지 않습니다. 대신 this(a, 0);는 같은 클래스의 ClassB(int a, int b) 생성자를 호출하며, 이 생성자 안에서 명시적으로 super();를 호출하고 있습니다. 따라서 new ClassB(100)을 실행할 때, ClassA의 생성자는 한 번만 호출됩니다.

이해를 돕기 위한 유사한 질문으로, “Super와 this 관련하여 궁금한 점이 있습니다!” 질문이 유용할 수 있습니다. 여기서는 super와 this를 사용하는 상황에 대해 다루고 있으며, 비록 직접적인 답변은 아니지만 상속과 생성자 호출 방식에 대한 이해를 심화시킬 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

채널톡 아이콘