강의로 돌아가기
심승현

부모와 자식에게 같은 이름의 메서드가 있을경우.

Car 와 Bus에 각각 run() 메서드가 있는경우
Car c = new Bus();
c.run();을 하게되면
Bus의 메서드가 실행되는 것을 볼 수 있는데
강의에서는 Car c = new Bus(); 을 하게되면 Car의 메서드만 사용 할 수 있다고 하는거 같은데
그럼 Car의 run()이 실행 되야 하는거 아닌가요?? 왜그런건가요?

1 개의 답변
서봉균

자바 고수는 아니지만 나름대로 답변을 적어볼게요
Car c = new Bus();에서 인스턴스 car는 Car를 상속받은 Bus이지만 타입은 Car이기 때문입니다

public class Car {
    public void run(){
        System.out.println("super run");
    }
    public void print() {
        System.out.println("super print");
    }
}
public class Bus extends Car{
    public void run() {
        System.out.println("sub run");
    }
    public void sub() {
        System.out.println("sub");
    }
}
public class BusCar {

    public static void main(String[] args) {
        Car car = new Bus();

        car.run();
        car.print();
        car.sub(); //The method sub() is undefined for the type Car
        //output
        //sub run
        //super print
    }
}

run() 메소드는 오버라이딩되어 Bus()의 run()이 호출되지만
동영상처럼 Bus의 ppangppang() 메소드를 호출하려고 c.ppangppang(); 을 타이핑하면 Car에는 ppangppang 메소드가 없기 때문에
The method sub() is undefined for the type Car 에러메시지가 뜹니다

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.