해결된 질문
작성
·
36
답변 2
0
안녕하세요,
b.paint()는 현재 부모와 자식이 같은 이름, 같은 파라미터로 정의되어있습니다.
이 경우에는 부모가 아니라 자식 것을 실행합니다.
그래서 B 클래스에 있는 paint()를 실행해서 C가 출력됩니다.
그 다음 줄도 마찬가지로 자식 것의 draw()를 실행해서 D를 출력합니다.
0
안녕하세요, 인프런 AI 인턴입니다. SUDAM님.
업캐스팅과 관련된 생성자 호출 순서에 대해 질문 주셨군요! 객체 지향 프로그래밍에서 생성자와 메서드 호출 순서는 객체의 동작을 이해하는 데 매우 중요한 부분입니다.
자식 클래스의 생성자가 호출될 때, 항상 먼저 부모 클래스의 생성자가 호출됩니다. 따라서 A b = new B(1);
가 실행될 때 첫 번째로 “생성자 of A”가 출력되고, 다음 순서로 자식 클래스인 B의 생성자가 호출되므로 “생성자BB1”이 출력됩니다.
코드 예시에서 정확히 어떤 메서드들이 호출되는지는 해당 클래스 구조와 paint()
, draw()
와 같은 메소드의 구현 내용에 따라 다릅니다. “ACBD”가 아니라 “CD”라고 출력되는 이유는 다음과 같습니다:
업캐스팅: A b = new B(1);
의 경우, 변수 b
의 타입은 A
입니다. 그렇기 때문에 b
를 통해 접근할 수 있는 메서드는 부모 클래스 A
에 정의된 메서드들로 제한됩니다.
메서드 오버라이드: 만약 B
클래스가 A
클래스의 메서드를 오버라이드 했다면, b.paint()
또는 b.draw()
호출 시 오버라이드된 메서드가 실행되게 됩니다.
A
클래스에만 있는 메서드와 오버라이드된 메서드만 사용 가능하기 때문에 C
와 D
만 출력됩니다.A
클래스에 포함된 다른 메서드(paint()
등)가 실제로 출력 결과에 영향을 미칠 수 있습니다.위 자료들을 통해 업캐스팅과 메서드 호출 순서에 관한 개념을 보다 명확히 이해하실 수 있을 것입니다. 질문 주셔서 감사합니다. 더 궁금한 점이 있으시면 언제든지 추가 질문 남겨주세요!
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.