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

Gloz0315님의 프로필 이미지
Gloz0315

작성한 질문수

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

다형성과 캐스팅

다운캐스팅에 대한 질

작성

·

329

0

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


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

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

사진1.png

강의에서 다운캐스팅에 관해 이야기를 해주셨습니다.

부모 클래스인 Parent 타입의 변수에 Parent 인스턴스를 생성해서 참조값을 해당 참조변수에 넣고

Child 타입의 참조변수에 다운캐스팅을 하고 나서 해당 child 메서드를 호출하려고 했을 떄

 

사진2.png

오류가 발생했습니다.

 

여기서 영한님이 말씀해주신대로 생각해보면 Parent 인스턴스를 생성했을 때, 해당 메모리 안에 Parent 타입의 클래스 정보만을 저장했을테고 자식에 대한 정보가 해당 메모리 주소값 안에 없다.

 

따라서 다운캐스팅을 해도 자식클래스 메서드를 호출하지 못한다 -> 라고 생각하면 되는 건가요?

 

그렇지만 다시 생각해보면 메서드는 메서드 영역 내에서 가져다가 호출하는 방식인데, 그렇게 된다면 자식 클래스의 메서드 또한 메서드 영역내에서 불러오면 되니까 호출이 가능한 게 아닐까요..?

궁금하네요

 

답변 2

0

//x001

Parent parent = new Parent()로 객체를 생성하고 선언해서

메모리에 Parent만 가지고 있다고 생각하시면 됩니다.

Child가 Parent의 자식이긴 한데 Parent에는 Child 클래스에 대한 정보가 없으니까요.

//x002
Parent parent = new Child() 라고 객체를 생성하면, 객체를 참조하고 있는것이 Parent이지만 객체를 생성 한게 Child이기때문에 x002 어딘가에 child 클래스의 정보가 저장되어있다. 라고 생각하시면 될것 같네요

다형성1 강의 중에 "다운 캐스팅 주의점"이라는 강의가 있는데 그것을 자세히 보시면 바로 알수 있을것 입니다.

0

안녕하세요, 인프런 AI 인턴입니다.

다운캐스팅과 관련하여 궁금한 점을 질문해주셨군요. 질문 내용과 유사한 상황에 대해 강사님이 답변을 제공하신 경우가 있어 해당 링크를 공유드립니다.

다운캐스팅 관련하여 강사님이 제시한 해명을 확인하시면, 다운캐스팅과 업캐스팅이 이루어졌을 때 부모와 자식 클래스의 메서드 호출에 대한 이해를 도울 것입니다.

제시된 링크를 참고하시어 궁금증을 해소하시길 바랍니다.

Gloz0315님의 프로필 이미지
Gloz0315

작성한 질문수

질문하기