본문 바로가기
프로그래밍/JAVA

자바의 정석 기초 ( 참조변수의 형변환 / instanceof 연산자 )

by ✲ 2020. 7. 12.
반응형

남궁성님의 자바의 정석 기초편을 보면서 혼자 공부하는 공간입니다. 참고 부탁드립니다. 

참조변수의 형변환

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

- 조상 자손 관계의 참조변수는 서로 형변환 가능 

* 객체가 없어도(NULL) 형변환은 가능하지만, 실행하면 NullPointException 발생

예제 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Ex7_7 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Car car = null;
        FireEngine fe = new FireEngine();
        FireEngine fe2 = null;
        
        fe.water();
        car = fe; // car  = (Car) fe; 형변환 생략
//        car.water();    // 에러 . Car타입의 참조변수인 car로는 water() 사용 불가 
        fe2 = (FireEngine)car;    // 자손타입 ← 조상타입, 형변환 생략 불가 
        fe2.water();
    }
 
}
class Car { 
    String color;
    int door;
        
    void drive() {
        System.out.println("drive, Brrr~~");
    }
    void stop() {
        System.out.println("stop!!!");
    }
}
class FireEngine extends Car{
    void water() {
        System.out.println("water!!!");
    }
}
 
cs

 

instanceof 연산자

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

ex) 

void doWork(Car c){

    if (c instanceof FireEngine) {

        FireEngine fe = (FireEngine) c; 

        fe.water(); 

        ....

ex)

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 

// 조상 및 자기자신은 항상 True 

Object obj = (Object)fe;         // OK 

Car  c       = (Car) fe ;           // OK 

 

 

반응형

댓글