instanceof
- 참조변수의 형변환 가능 여부 확인을 위해 사용하며, 가능하면 true를 반환한다.
- 형변환전에 반드시 instanceof확인을 하고 형변환 해야한다.
static void doWork(Car c) { // 파라미터로 new Car(), new FireEngine(), new Ambulance 전부 들어갈 수 있음. (
if( c instanceof FireEngine) {
FireEngine fe = (FireEngine) c;
fe.water();
}
위 메서드처럼 , 파라미터에는 Car의 모든 계층이 들어갈 수 있다. Car의 조상인 Object 부터 그의 자손인 ambulance, fireengine까지
그렇다는 말은 즉 if문 안 에서 형변환을 하려고 할 때, FireEngine 에 계층도에 형변환이 가능한 클래스가 있어야 한다는 말인데,
만약 Car c 자리에 Ambulance 가 들어왔다면, 형변환이 불가능하니 당연히 실행되지 않을 것이다.
그렇다면 new Car () , 객체를 만든다면 FireEngine 의 부모 클래스이니 조건문은 true로 반환될 것이다.
과연 fe.water 은 실행될까 ??
정답은 실행되지 않는다.
왜냐하면 우선 new Car() 이라는 객체는 water라는 메서드를 갖고 있지 않다. 그렇기 때문에 참조면수 FireEngine이 형변환된 c의 리모
콘을 복사하여 주소를 갖고 있는다고 하여도 , 메서드가 실행되지 않는 것이다. FireEngine을 파라미터 그대로 받아서 메서드를 실행하면
아래 화면처럼 정상적으로 출력되는 것을 확인할 수 있다.
'JAVA의 정석' 카테고리의 다른 글
(객체part2 ) 8. 다형성의 장점(2)/ 참조변수의 배열 (0) | 2023.09.13 |
---|---|
(객체part2 ) 7. 다형성의 장점(1) (0) | 2023.09.08 |
(객체part2 ) 5. 다형성과 참조변수의 형변환 (0) | 2023.09.07 |
(객체part2) 4. 접근 제어자와 캡슐화 (0) | 2023.08.30 |
(객체part2) 3. 패키지 / import 문과 static import문 (0) | 2023.08.19 |