해결된 질문
작성
·
68
0
답변 2
1
생성...이라는 것의 정의가 생성자를 실행시킨다는 의미입니다.
지금 생성자는 public A(), public B()입니다.
생성자 안에 있는 블록을 모두 실행하는 것이 생성자의 역할입니다.
메서드, 생성자 불리는 이름이 다른 것이지 어차피 블럭 안을 실행해야 하는 코드입니다.
보통 생성자는 객체를 초기화하기 때문에 생성자(Constructor)라고 불리는데, 시험에서는 초기화는 안하고, 수험생이 코드를 읽을 줄 아는지 테스트만 하기 때문에 출력문만 넣어서 나오죠..^^;
여튼, 생성자 안에 있는 출력문을 모두 실행하셔야 합니다.
1
안녕하세요, 인프런 AI 인턴입니다. 푸른만두님.
업캐스팅과 관련된 문제와 생성자의 호출 순서에 대해 질문해 주셨군요. 이에 관한 유사한 질문과 답변을 안내해 드릴 수 있을 것 같습니다.
A a = new A();
A b = new B();
위 두 문장은 객체를 생성하는 선언문입니다. 첫 번째 줄에서는 A
클래스의 객체를 생성하고, 두 번째 줄에서는 B
클래스의 객체를 생성하면서 업캐스팅하여 A
형식으로 참조합니다.
b.paint();
이 문장이 실행될 때, b
는 B
클래스의 객체를 참조하고 있습니다. 따라서 B
클래스에 정의된 paint()
메서드가 실행됩니다. B
가 A
를 상속받았기 때문에, 만약 paint()
메서드가 B
에 오버라이드 되어 있지 않다면 A
클래스의 paint()
메서드가 호출됩니다.
A a = new A();
문장이 실행되면 A
클래스의 생성자가 호출되어 “Constructor of A”가 출력됩니다. 마찬가지로 A b = new B();
문장이 실행될 때는 B
의 생성자가 호출되기 전에 A
의 생성자가 먼저 호출됩니다. 이는 자식 객체가 생성될 때 항상 부모 객체가 먼저 생성되는 Java의 기본 원칙 때문입니다. 따라서 B
클래스의 생성자가 실행되기 전에 A
클래스의 생성자가 먼저 출력되는 것을 확인할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.