코드를 다시 보면 Van 타입을 Car 타입이 가리키고 있습니다. Car 클래스가 Van 클래스의 부모로 더 큰 그릇이기 때문에 아무 문제없이 가리킬 수 있었던 것입니다.
그런데 이것을 Van 타입으로 묶어서 c를 가리키려고 하면 에러가 발생합니다.
Van van = c ;
실행결과
Type mismatch: cannot convert from Car to Van
컴파일러 입장에서 c는 Car형이기 때문에 그보다 작은 Van형이 가리킬 수는 없습니다.
Car는 Van보다 상위 개념입니다. Car에 다른 차, 즉 트럭이 올지 스포츠카가 올지 알 수 없습니다. 그런 차를 가리키면서 Van이라고 할 수는 없기 때문에 허용하지 않습니다.
기본형 변수에서 큰 그릇에 담겨있는 것을 작은 그릇에 넣을 때를 다시 생각해보세요. 프로그래머가 그릇의 크기를 알고 있을 때 강제로 형변환해줬죠? 그와 똑같습니다.
Van van = (Van)c ;