• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

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

23.12.12 22:14 작성 23.12.12 22:16 수정 조회수 326

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근욱

질문자

2023.12.12

답변 감사드립니다.

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

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

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

도움이 되셨길 바래요 🙂