ch7-26 instanceof 연산자
- 참조변수의 형변환 가능 여부 확인에 사용. 가능하면 true 반환
(조상<->자손)
- 형변환 전에 반드시 instanceof로 확인해야 함
void doWork (Car c) {
if(c instanceof FireEngine) { // 1. 형변환이 가능한지 확인
FireEngine fe = (FireEngine) c; // 2. 형변환
fe.water();
...
}
}
/* 형변환을 하는 이유는 인스턴스의 원래 기능을 모두 사용하려고
Car타입의 리모콘인 c로는 water()를 호출할 수 없으니까.
리모콘을 FireEngine타입으로 바꿔서 water()를 호출.
*/
FireEngine fe = new FireEngine();
System.out.println(fe instanceof Object); //조상 true.
System.out.println(fe instanceof Car); //조상 true.
System.out.println(fe instanceof FireEngine); // true.
Object obj = (Object) fe; // OK
Car c = (Car) fe; // OK
Q. 참조변수의 형변환은 왜 하나요?
A. 참조변수(리모콘)를 변경함으로써 사용할 수 있는 멤버의 갯수를 조절하기 위해서
FireEngine f = new FireEngine();
Car c = (Car)f; // OK. 조상인 Car타입으로 형변환(생략가능)
Q. instanceof 연산자는 언제 사용하나요?
A. 참조변수를 형변환하기 전에 형변환 가능여부를 확인할 때
void doWork (Car c) {
if(c instanceof FireEngine) { // 1. 형변환이 가능한지 확인
FireEngine fe = (FireEngine) c; // 2. 형변환
fe.water();
...
}
}
'Dev > Java' 카테고리의 다른 글
Server Add and Remove에 프로젝트가 안 뜰때 (0) | 2022.07.12 |
---|---|
[Java] 자바의 정석 기초편 ch7-27 매개변수의 다형성 (0) | 2022.06.27 |
[Java] 자바의 정석 기초편 ch7-24,25 참조변수의 형변환 (0) | 2022.06.22 |
[Java] 자바의 정석 기초편 ch7-23 다형성(polymorphism) (0) | 2022.06.22 |
[Java] 자바의 정석 기초편 ch7-22 캡슐화와 접근 제어자 (0) | 2022.06.22 |