참조변수가 참조하고 있는 인스턴스의 실제타입을 알아보기 위해
instanceof 연산자를 사용한다
(사용형식) 참조변수 instanceof 클래스명
(ex)
void doWork(){
if(c instanceof FireCar){ //1. 인스턴스의 타입을 확인
FireCar fc = (FireCar)c; //2. 형변환 down-casting
}
(ex2)
package zz_practice;
public class Ex3_18 {
public static void main(String[] args) {
FireEngine2 fe = new FireEngine2();
Car2 c2 = new Car2();
if(fe instanceof FireEngine2){ // fe라는 참조변수는 FireEngine2를 포함하고 있ㄷㅏ.
System.out.println("이것은 파이어엔진의 인스턴스이다");
FireEngine2 fe2 = fe; // 검사한 타입으로 형변환
}
if(fe instanceof Car2){// fe가 Car2에 속해 있나요? true
System.out.println("이것은 카의 인스턴스이다");
Car2 fe2 = fe;
}
if(fe instanceof Object){//fe가 Object에 속해 있나요? true
System.out.println("이것은 Object의 인스턴스이다");
Object ff = fe;
}
if(c2 instanceof FireEngine2){ //c2의 실제타입은 FireEngine2에 속하지 않으므로 false
System.out.println("fe는 c2의 인스턴스이다."); // flase임으로 실행 불가능
FireEngine2 fe2 = (FireEngine2)c2; // (FireEngine2)캐스팅연산자 캐스팅 불가능
}
if(c2 instanceof Object){ //c2는 Object에 속해있나요?
System.out.println("c2는 Object의 인스턴스이다.");
Object c3 = c2;
}
}
}
class Car2{}
class FireEngine2 extends Car2{}