참조 변수의 형변환
FireEngine f = new FireEngine();
Car c = (Car)f; // 조상 = 자손 : 생략 가능, 사용할 수 있는 멤버가 줄어듦
FireEngine f2 = (FireEngine)c; // 자손 = 조상 : 생략 불가, 멤버가 늘어남
Ambulance a = (Ambulance)f; // ERROR: 형제 관계
- 사용할 수 있는 멤버의 개수를 조절 ( 리모컨 변경 )
- 조상, 자손 관계의 참조 변수는 서로 형변환 가능, 형제 관계는 형변환 불가
- 형변환 해도 타입만 바뀌고 객체와 주소는 그대로
Car c = new Car();
FIreEngine fe = (FireEngine);c // 형변환 실행 에러 : java.lang.ClassCastException, 객체에 water() 없음
fe.water(); // 컴파일 OK
- 참조변수가 가리키는 실제 객체의 멤버 개수를 넘지 않는 게 중요
instanceof 연산자
if (c instanceof FireEngine) {
FireEngine fe = (FireEngine)c;
fe.water();
}
// fe는 Object, Car, FireEngine 타입으로 형변환 가능
System.out.println(fe instanceof Object);
System.out.println(fe instanceof Car);
System.out.println(fe instanceof FireEngine);
- 참조변수 형변환 가능여부 확인에 사용, 가능하면 true 반환
- 형변환 전에 반드시 instanceof로 확인해야 함