🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

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

24.02.14 22:16 작성 조회수 171

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

David님의 프로필

David

2024.02.16

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

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

  2. 네, 맞습니다.

감사합니다.

채널톡 아이콘