//예를들어 Car의 자손인 FireEngine 과 Ambulance이 있다고 가정하자
FireEngine f = new FireEngine();
Car c = (Car)f; //OK. 조상인 car타입으로 형변환 (생략가능)
FireEngine f2 = (FireEngine)c; //OK. 자손인 FireEngine타입으로 형변환 (생략불가)
Ambulance a= (Ambulance)f; //에러! 상속관계가 아닌 클래스 간의 형변환 불가!
class Car{
String color;
int door;
void drive(){ // 운전하는 기능
System.out.println("drive!");
}
void stop(){ // 운전하는 기능
System.out.println("stop!");
}
}
class FireEngine extends Car{
void water(){
System.out.println("water!");
}
}
📝예제
class Ex{
public static void main(String args[]){
Car car = null;
FireEngine fe = new FireEngine();
FireEngine fe2 = null;
fe.water();
car = fe; // car (car)fe;에서 형변환이 생략됨
// car.water(); -> 컴파이 에러! Car 타입의 참조변수로는 water()를 호출할 수 없다
fe2 = (FireEngine)car; //자손타입 <- 조상타입 형변환 생략불가
fe2.water();
}
}
✔ 자손(멤버 5개) -> 조상(멤버 4개) 이렇게 감소 시키키는 건 안전하지만,
조상(멤버 4개) -> 자손(멤버 5개) 증가 를 시키는 건 안전하지 않다(왜냐하면 실제 참조변수가 가르키는 객체가 뭔지 모르기 때문에)
❗ 전하지 않은 변환이기 때문에 형변환을 꼭! 써주라고 생략 불가이다!!