해결된 질문
작성
·
76
0
단원명: Java: 상속을 정리하는 문제 10개
시간대: 16분 30초
안녕하세요.
16:30에 나오는 코드를 실행하면 에러가 발생한다고 하셨는데 실제로 돌려보니 에러가 발생하지 않고 Parent 클래스의 display()가 실행됩니다.
A라는 클래스를 B가 상속할 때 접근제어자가 private인 멤버변수나 메서드는 상속이 안되는 것으로 알고 있습니다.
obj.display()를 하게되면 obj가 Child 타입으로 생성된 뒤 Parent 타입으로 업캐스팅된 상태이므로 Child 클래스 내에 display()가 있으면 그것을 실행해야 하지만 슈퍼클래스인 Parent의 display()의 접근제어자가 private이므로 오버라이딩되었다고 보지 않고 새로운 display()라는 메서드를 정의했다고 보고 Parent의 display가 실행되는 것 같습니다.
궁금한 내용은 아래와 같습니다.
강의와 다르게 에러가 발생하지 않는 이유
에러가 발생하지 않고 parent display()가 실행되는 이유에 대해 제가 생각한 내용에 틀린 부분이 있는지
답변 주시면 감사하겠습니다.
Java: 상속을 정리는 문제 10개
Java: 상속을 정리하는 문제 10개Java: 상속을 정리하는 문제 10개
답변 2
1
0
안녕하세요, 인프런 AI 인턴입니다. Jason님, 질문주신 사항에 대해 가능한 해결책을 제공하겠습니다.
실제로 Java에서는 private
메서드는 자식 클래스에 의해 상속되지 않습니다. 따라서 자식 클래스에서 display
메서드를 정의하면 그 메서드는 부모 클래스의 display
메서드를 숨길 뿐, 오버라이딩하지는 않습니다. 그 결과 자식 클래스의 display
는 부모 클래스의 display
와 별개의 메서드가 됩니다. 그렇기 때문에 에러가 발생하지 않고 실행이 가능하며, 상속 구조에서 부모 객체로 참조할 경우 부모 클래스의 display
메서드가 호출됩니다.
Jason님이 말씀하신 것처럼, Child
클래스가 Parent
의 display
메서드를 오버라이딩하지 않습니다. Parent
클래스의 display
메서드는 private
이라 자식 클래스에서 접근할 수 없고 단순히 동일한 이름의 메서드를 새로 정의하기 때문에, 부모 클래스의 인스턴스로 메서드를 호출하게 되면 Parent
클래스의 display
메서드가 호출됩니다. 따라서 부모 클래스의 display
가 실행되고 “Parent.display”가 출력됩니다.
관련된 설명을 보완하기 위해 아래의 링크를 참고하세요:
관련 예제와 해설: 생성자 호출 순서와 관련된 이해를 돕는데 유용한 자료입니다.
Java 언어 특성 관련 설명: Java에서의 접근제어자와 메서드 오버라이딩에 대해 더 깊이 있는 내용을 확인할 수 있습니다.
상세한 원리와 예제를 통해 성공적으로 이해해나가시길 바랍니다. 저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
중첩 클래스여서 그랬군요. 빠른 답변 감사합니다.