인프런 커뮤니티 질문&답변

Choi근욱님의 프로필 이미지
Choi근욱

작성한 질문수

김영한의 실전 자바 - 기본편

캐스팅의 종류

다운캐스팅 관련 질문드립니다.

작성

·

441

·

수정됨

0

 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.


1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]

//부모 변수가 자식 인스턴스 참조(다형적 참조)
Parent poly = new Child();

Child child = (Child) poly; 
child.ChildMethod();

child.parentMethod(); //호출 가능

다운캐스팅으로 부모 타입의 poly를 자식타입으로 변경하여

자식 클래스의 childMethod를 호출 가능하였습니다.

 

그런데 바로 child.parentMethod도 호출이 가능하던데

다운캐스팅, 업캐스팅 시 부모, 자식의 기능을 모두 불러올 수 있는 것인가요?

 

부모와 자식의 기능을 모두 호출 가능한 이유가 무엇인지 이해가 되지 않습니다.

 

 

 

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. Choi근욱님

상속 관계를 떠올려보시면 바로 이해가 되실꺼에요.

자식을 호출하게 되면 먼저 자식에서 찾고, 해당 기능이 없는 경우 부모로 올라가서 찾을 수 있습니다 🙂

child.parentMethod()의 경우 먼저 자식인 Child 인스턴스에서 찾고 없으면 부모인 Parent로 올라가서 찾게 됩니다.
따라서 부모에 있는 parentMethod() 메서드도 호출이 가능합니다.

혹시 관련 내용이 이해가 어렵다면 앞서 학습한 상속을 복습해주세요 🙂

감사합니다.

Choi근욱님의 프로필 이미지
Choi근욱
질문자

답변 감사드립니다.

다형적 참조로 메모리에 Parent, Child가 같은 참조값으로 들어가게 되어 상속의 개념으로 부모에 있는 parentMethod()도 호출이 가능하다는 말로 이해하면 될까요?

김영한님의 프로필 이미지
김영한
지식공유자

new Child()를 하게 되면 메모리에 Parent, Child가 모두 생성됩니다. (상속 관계에서 설명한 부분)

따라서 이후에 child.parentMethod()를 호출하게 되면 Child에서 먼저 찾고 없으면 부모인 Parent에서 찾을 수 있습니다. 이 경우 parentMethod()는 부모인 Parent에 있기 때문에 결과적으로 호출할 수 있습니다.

도움이 되셨길 바래요 🙂

Choi근욱님의 프로필 이미지
Choi근욱

작성한 질문수

질문하기