작성
·
39
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
저와 비슷한 질문을 남긴 사람들의 글을 읽어보았는데, 명확하게 이해가 가질 않아서 질문을 남깁니다.
부모 변수가 자식 인스턴스를 참조하는 상황
Parent poly = new Child();
이 상황은 Parent를 상속받은 Child라는 객체를 생성하여, 현재 Parent,Child 두 객체가 생성된 상황이며, poly를 부모 변수로 선언하였습니다. 부모는 자식에 대해 알 수 없다라는 논리에 따라 Child라는 객체가 있어도 부모 Parent는 Child에 선언된 메서드와 필드를 모른다는 것이 영한님의 설명인 것 같습니다.
그런데, 오버라이딩을 하게 되더라도 제 생각에는 여전히, Parent는 Child의 메서드와 필드를 모르는 상황은 여전한데, 어떻게 Parent가 Child 메서드가 오버라이딩을 한 상황을 알고, 오버라이딩된 Child 메서드가 우선권을 갖는지 잘 모르겠습니다. 이는 '부모는 자식에 대해 알 수 없다'라는 논리와 맞지 않는 것 같아서 부가적인 설명을 원합니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 김도협님께서 올려주신 오버라이딩과 다형성에 관한 질문에 대해 도움을 드리겠습니다. 자바에서 다형성은 매우 중요한 개념이며, 이해하기 까다로울 수 있습니다. 질문하신 내용에서 다형성, 특히 자바에서 메서드 오버라이딩이 어떻게 작동하는지에 대해 설명드리겠습니다.
자바에서 다형성은 부모 클래스 타입의 참조 변수가 자식 클래스의 객체를 참조할 수 있도록 허용합니다. Parent poly = new Child();
와 같이 말이죠. 이 경우 poly
는 Parent
타입으로 선언되었지만, 실제로는 Child
객체를 참조하게 됩니다.
메서드 오버라이딩: 자바에서 메서드를 호출할 때, 실제 객체 타입에 기반해 메서드가 실행됩니다. 즉, 변수는 Parent
타입이지만, poly
가 참조하는 실제 객체는 Child
이므로, Child
클래스 내에 오버라이딩된 메서드가 호출됩니다.
런타임 결정: 오버라이딩된 메서드가 호출되는 이유는 자바가 메서드 실행 시에 실제 객체의 타입을 기준으로 메서드를 찾기 때문입니다. 이는 컴파일 시간에는 변수의 타입만 확인하지만, 실행 시간에는 객체(인스턴스)의 타입을 기준으로 동작합니다.
부모 클래스는 자식 클래스의 구체적인 구현을 알 수 없습니다. 즉, 부모 타입의 변수로는 자식 클래스에서 새롭게 추가된 메서드나 필드를 사용할 수 없습니다. 그러나 오버라이딩된 메서드는 예외입니다. 오버라이딩된 메서드는 동일한 메서드 시그니처를 가지며, 부모 클래스의 메서드를 자식 클래스에서 재정의한 것이기 때문에 런타임 시에 실제 객체의 메서드가 호출됩니다.
이와 관련된 기존 질문과 답변을 참고하시면 이해에 도움이 될 수 있습니다.
김도협님의 이해를 돕기 위해 유사한 질문들이 제공된답니다. 이 답변들이 다형성 개념을 좀 더 심도 있게 이해하는데 도움이 되길 바랍니다. 추가적으로 궁금한 부분이 있으면 언제든지 이어서 질문해 주세요. 😊
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.