본문 바로가기
Programming Language/Java

[자바의 정석] ch7-24 ~ ch7-26 객체지향 개념 정리 (참조변수의 형변환, instanceof 연산자)

by Baest 2021. 8. 10.

ch7-24,25 참조변수의 형변환

- 사용할 수 있는 멤버의 갯수를 조절하는 것

- [중요!] 조상 자손 관계의 참조변수는 서로 형변환 가능

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Car { }
 
class FireEngine extends Car { }
 
class Ambulance extends Car { }
 
 
FireEngine f = new FireEngine();
 
Car c = (Car)f; // OK. 조상인 Car타입으로 형변환(생략가능)
FireEngine f2 = (FireEngine)c; // OK. 자손인 FireEngine타입으로 형변환(생략가능)
Ambulance a = (Ambulance)f; // 에러! 상속관계가 아닌 클래스 간의 형변환 불가
 
 
 
 
cs

 

 

ch7-26 instanceof 연산자

- 참조변수의 형변환 가능여부 확인에 사용. 가능하면 true 반환

- [중요!] 형변환 전에 반드시 instanceof 로 확인해야 함

 

1
2
3
4
5
6
7
void doWork (Car c) {
    if (c instanceof FireEngine) {
        FireEngine fe = (FireEngine) c; // 1. 형변환이 가능한지 확인
        fe.water(); // 2. 형변환
    }
 
}
 
cs

 

*instanceof 는 자기자신과 조상에 대하여 true

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

 

 

 

<-------------------------------------------------------------정리------------------------------------------------------------->

Q. 참조변수의 형변환은 왜 하나요?

A. 참조변수(리모콘)을 변경함으로써 사용할 수 있는 멤버의 갯수를 조절하기 위해서

 

FireEngine f = new FireEngine();

Car c = (Car) f;   //OK. 조상인 Car타입으로 형변환 가능(생략가능)

 

Q. instanceof 연산자는 언제 사용하나요?

A. 참조변수를 형변환하기 전에 형변환 가능여부를 확인할 때 

 

 

 

 

============================================================================

https://youtu.be/XP8zpt-yFZs