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