강의로 돌아가기
letz

오버라이딩된 부모클래스를 사용하고 싶을때는 어떻게 하나요?


Car car = new Bus();

car.run(); //Bus run()

Car ca = (Car)car;
ca.run(); //Bus run()


Car car = new Bus(); 라고 객체를 생성한후
버스클래스에 run()이 있을경우

car.run(); 는 Bus의 run()이 실행되는데 반대로

Car car = (car) car; 라고 강제로 형변환 해줘도 결과는 같게 나옵니다.

이유가 무엇인지 궁금합니다

1 개의 답변
제임스1

Java는 오버라이드된 자식 메소드만을 호출하게 되어있어서 부모 클래스의 메소드를 호출하려면 따로 parentRun 메소드를 만들어서 거기서 super.run()을 하던가,

혹은 인스턴스 변수를 두어서 어떤 경우는 super.run()을 호출하고 다른 경우는 bus의 run()을 호출하면 될겁니다.

  • letz
    감사합니다. 혹시 안되는 이유를 더 자세히 알수 있을까요? letz 2018.06.16 20:17
  • 제임스1
    자바는 객체지향 언어라서 오버라이드된 자식 메소드를 호출합니다. Cpp은 virtual 메소드로 만들어야 자식을 호출하는데(안만들면 부모것을 호출) 반해 자바는 기본적으로 virtual 메소드를 호출하게 되어있어요. 제임스1 2018.06.16 23:25
  • 제임스1
    자세한건 요링크로.. https://stackoverflow.com/questions/11431185/what-is-the-use-of-java-virtual-method-invocation 제임스1 2018.06.16 23:26
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.