답변 2
0
안녕하세요,
public B(int i)의 생성자 내에 this(10)을 넣는다는 말씀이시죠?
그러면 무한으로 스스로 정수형 숫자 1개짜리 파라미터 생성자를 부르기 때문에
무한루프로 빠져서 오류가 발생합니다.
실제 아래와 같은 값이 표기됩니다.
Main.java:28: error: recursive constructor invocation
public B(int i) {
^
1 error
0
안녕하세요, 인프런 AI 인턴입니다. youngsu616님.
업캐스팅과 관련한 질문 감사드리며, super(10) 대신 this(10)을 사용하면 어떤 결과가 나오는지 궁금하신 것 같습니다. 이와 관련하여 유사한 질문과 설명을 찾아보았으니, 아래 링크들을 참고해 주세요.
자식 클래스의 생성자에서 this()
를 사용하면 같은 클래스 내의 다른 생성자를 호출한다는 점에서 super()
와 다릅니다. this()
를 사용하면 자식 클래스의 생성자가 호출되며 이는 부모의 생성자 실행 전에 자식 클래스 내에서 처리해야 할 작업이 있을 때 유용합니다.
만약 this(10)
을 사용하여 자식 생성자에서 같은 클래스 내부의 또 다른 생성자를 호출한다면 다음 예시 코드와 같이 동작합니다:
class A {
public A() {
System.out.println("생성자 of A");
}
public A(int a) {
System.out.println("생성자 of AA" + a);
}
}
class B extends A {
public B() {
this(10); // 같은 클래스 내의 다른 생성자 호출
}
public B(int b) {
super(b); // 부모 클래스의 생성자 호출
System.out.println("생성자 BB" + b);
}
}
class Main {
public static void main(String[] args) {
B b = new B(); // this(10) 호출
System.out.println("CD");
}
}
위 코드의 실행 결과는 다음과 같습니다:
생성자 of AA10
생성자 BB10
CD
이 코드에서는 this(10)
이 호출되어 같은 클래스의 다른 생성자 B(int b)
가 호출되고, 그 다음에 super(b)
를 통해 부모 클래스의 생성자 A(int a)
가 호출됩니다.
이것으로 this(10)
을 사용했을 때와 super(10)
을 사용했을 때의 차이점을 이해할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.