c와 마침표를 입력하면 메서드 리스트가 나옵니다. 하지만 ppangppang은 나오지 않습니다. 이때 나오지 않는 메서드는 사용할 수 없다는 의미입니다. 혹시나 하고 메서드를 호출하면 컴파일상에서 오류가 납니다.
실행결과
The method ppangppang() is undefined for the type Car
이렇게 부모 타입으로 자식을 가리킬 수는 있지만 부모 타입으로 자식을 가리켰을 때는 부모가 가진 메서드만 사용할 수 있습니다.
자, 여기서 문제입니다. 실제로 생성된 Van 객체에는 ppangppang 메서드가 있을까요? 네, 있습니다. 있기는 하나 부모 타입으로 가리키고 있어서 ppangppang을 사용할 수는 없습니다. 이럴 때 형변환하면 이 기능을 사용할 수 있습니다. 클래스도 형변환할 수 있습니다.
기본형 변수를 형변환할 때 큰 그릇에 들어있는 것을 작은 그릇으로 담는 경우와 반대로 작은 그릇에 들어있는 것을 큰 그릇으로 담는 경우를 배웠죠? 객체는 항상 부모가 더 큰 그릇이라고 생각하면 됩니다. 개념적인 의미입니다.
사실 지금도 클래스 형변환이 일어난 것이나 마찬가지입니다.
Car c = new Van();