작성
·
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() 메서드도 호출이 가능합니다.
혹시 관련 내용이 이해가 어렵다면 앞서 학습한 상속을 복습해주세요 🙂
감사합니다.
new Child()를 하게 되면 메모리에 Parent, Child가 모두 생성됩니다. (상속 관계에서 설명한 부분)
따라서 이후에 child.parentMethod()를 호출하게 되면 Child에서 먼저 찾고 없으면 부모인 Parent에서 찾을 수 있습니다. 이 경우 parentMethod()는 부모인 Parent에 있기 때문에 결과적으로 호출할 수 있습니다.
도움이 되셨길 바래요 🙂
답변 감사드립니다.
다형적 참조로 메모리에 Parent, Child가 같은 참조값으로 들어가게 되어 상속의 개념으로 부모에 있는 parentMethod()도 호출이 가능하다는 말로 이해하면 될까요?