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

index님의 프로필 이미지
index

작성한 질문수

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

다형성 활용2

다형성 재정의에 질문이 있습니다.

해결된 질문

작성

·

237

0

[질문 내용]

Dog dog = new Dog();

위의 코드는 Dog 내부에 extends로 Animal이 있기에 Dog 클래스는 Animal 이라는 부모가 있는걸 알 수 있습니다.

 

하지만

Animal dog = new Dog();

Animal 타입으로 Dog를 생성하면 힙메모리에는 Dog와 Animal이 하나의 영역에 생기지만 Animal 타입으로 선언하였기 때문에 힙메모리에서 Animal 부분을 먼저 바라볼 것으로 생각하는데 어떻게 Animal에서 자식 요소가 있는걸 알고 오버라이딩된 메서드가 우선적으로 처리되는건지 궁금합니다. annotation의 영향인가요?

 

=======

추가 질문!

Animal dog = new Dog();

위 코드와 같이 선언하면 자바에서는 자동으로 업캐스팅이 이뤄지는것 이라고 이해해도 될까요?

Animal dog = (Animal) new Dog();

위와 같이 자바에서 자동으로 형 변환을 시켜준다고 생각하면 되는건가요?!

답변 1

0

안녕하세요. Prodraft님, 공식 서포터즈 David입니다.

  1. 런타임(프로그램이 실행되는 중)에는 Animal dog로 선언된 변수 dog에 접근하여 (오버라이드된) 메서드를 호출하면 dog가 참조하고 있는 실제 객체를 확인합니다. new Dog으로 생성된 Dog 객체를 dog에 대입했으니 런타임에 (오버라이드된) 메서드를 호출하면 Dog 객체의 메서드를 호출하게 됩니다. 이와 관련된 자세한 내용은 자바 동적바인딩 이라는 키워드로 학습하시면 좋습니다.

  2. 네, 맞습니다.

감사합니다.

index님의 프로필 이미지
index

작성한 질문수

질문하기