inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

상속시 메모리 구조와 @Overriding 어노테이션 관련 질문 드립니다.

미해결

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

안녕하세요. 좋은 강의 정말 재미있게 잘 수강하고 있습니다. '상속과 메서드 오버라이딩' 강의 내용 관련하여 궁금한 점이 생겨 질문 드립니다. A와 B는 강의에서 설명해주신 내용입니다. [A.상속시 메모리 구조] 상속한 클래스의 메서드를 호출하는 경우에 1)본인 타입에서 해당 메서드를 먼저 찾고 2-1) 없으면 부모 타입에서 찾는다 2-2) 있으면 종료 [B. @Overriding] 자식 클래스의 메서드에 @Overriding 애노테이션을 붙여 오버라이딩 수행 시, 부모 클래스에 해당 메서드가 존재하지 않으면 컴파일 오류가 발생 그런데 여기에서 B 처럼 동작하려면 A의 2-2 경우에 자식 타입만 조사하고 종료하는 것이 아니라, 컴파일 타임에 부모 클래스의 메서드도 조사해야하지 않나요? @Overriding 애노테이션을 사용했을 때 실제로 어떤식으로 동작하는지 궁금합니다. 감사합니다.

  • java
  • 객체지향
  • 오버라이딩
devocean 댓글 1 좋아요 0 조회수 286

인스턴스 타입을 부모로해도 자식의 오버라이드 메서드가 호출되나요?

해결됨

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

안녕하세요! ElectricCar electricCar = new ElectricCar(); electricCar.move(); 이렇게 하면 호출한 electricCar 의 타입은 ElectiricCar 라서 인스턴스 내부의 ElectricCar 타입에서 시작한다고 하셨습니다. 그래서 electricCar.move(); 를 실행하면 ElectricCar 의 move() 메서드가 실행돼서 전기차를 빠르게 이동합니다. 이렇게 전기차로 출력이 됩니다. Car electricCar = new ElectricCar(); electricCar.move(); 그럼 이렇게 타입이 Car 타입이면 인스턴스 내부의 Car 타입에서 move() 메서드를 실행시켜 "차를 이동합니다."가 출력될 것이라고 생각했는데 전기차를 빠르게 이동합니다. 여기서도 전기차를 빠르게 이동합니다.가 출력됩니다. 어째서 Car 타입에서 move() 메서드를 실행하지 않고 ElectricCar 의 move() 메서드를 실행하게 되는건가요? 감사합니다!! 😊

  • java
  • 객체지향
  • 상속
  • 오버라이딩
노뚜 댓글 1 좋아요 0 조회수 539

인기 태그

인프런 TOP Writers

주간 인기글