참조 변수도 형 변환이 가능한데, 서로 상속 관계에 있는 클래스 사이에서만 형 변환을 할 수 있다.
자손타입 -> 조상타입: 캐스트 연산자를 생략할 수 있다.
조상타입 -> 자손타입: 캐스트 연산자를 생략할 수 없다.
자손타입 -> 조상타입
일 때 캐스트 연산자를 생략할 수 있는 이유는 자손타입이 조상타입보다 사용할 수 있는 멤버 수가 많기 때문에, 조상타입으로 형 변환 시 참조 변수가 사용할 수 있는 멤버의 수가 실제 인스턴스의 멤버 수 보다 적기 때문에 문제가 발생하지 않는다.
하지만, 조상타입 -> 자손타입
일 때 캐스트 연산자를 생략할 수 없는 이유는 참조 변수가 사용할 수 있는 멤버의 수는 늘어나는데, 실제 인스턴스에는 참조 변수가 사용할 수 있는 멤버가 존재하지 않을수도 있기 때문이다.(조상 타입 인스턴스가 자손 타입 보다 멤버가 적기때문)
즉, 상속 관계에 있는 클래스들은 서로 형변환은 가능하지만, 실제 참조변수가 가리키는 인스턴스가 조상인 경우 그 자손으로의 형 변환은 할 수 없다.(참조 변수가 사용할 수 있는 멤버가 존재하지 않으므로)