해결된 질문
작성
·
81
0
안녕하세요, “Java 언어 기출문제의 변형” 수업 수강 중 이해가지 않는 부분이 있어 질문 드리게 되었습니다. (4:30~)
class A {
A() {
System.out.print(‘A’);
}
A(char x) {
System.out.print(x);
}
}
class B extends A {
B() {
super();
System.out.print(‘B’);
}
B(char x) {
this();
System.out.print(x);
}
}
public class Test {
public static void main(String[] args) {
A s1 = new A(‘X’);
A s2 = new B(‘Y’);
A s2 = new B(‘Y’); 이 부분을 실행할 때
부모생성자를 먼저 실행한 후 B(char x)를 실행하지 않고
B(char x)를 먼저 실행하는 이유가 궁금합니다.
동일 질문에 파라미터가 있는 것을 이미 실행했다면, 기본 생성자는 실행되지 않는다고 답변 주셨는데,
왜 이 코드에서는 파라미터가 있는 것을 실행하기 전에 부모 생성자를 먼저 실행하지 않는 것인지 궁금합니다.
답변 1
1
다시 들어보니 제가 영상에서 설명을 잘못하긴했네요. 그런데 답 자체는 맞습니다.
정확히 말씀드리자면, 해당 문제에서는 자식의 super는 무시됩니다. 한 클래스의 동일한 생성자는 2번 실행되지 않습니다. 먼저 부모 생성자가 태어나는게 맞습니다.
그래서 XABY입니다.
생각하신 로직이 맞습니다.
추후에 해설 수정하겠습니다.
빠른 답변 정말 감사드립니다..!!