[Java] Reference Variable Casting

Jane·2021년 1월 27일
2
post-thumbnail

참조변수의 형변환

  • 상속관계에 놓여있다면 참조변수 간에도 형변환이 가능하다.
  • 만약 Apple과 Banana가 Fruits class를 상속하고 있다면 Apple→Fruits, Fruits→Banana로 형변환 하는 것이 가능하다.
    ※ 단, Apple과 Banana 사이의 형변환은 불가하다.
  • 자손타입을 조상타입으로의 형변환은 생략이 가능하지만, 반대의 경우에는 생략할 수 없다.
  • 기본형의 형변호나과 달리 참조변수의 형변환은 변수에 저장된 값이 바뀌는 것이 아니라 참조변수의 종류만 바뀌는 것이다.
class Main {
    public static void main(String[] args) {
        FireEngine fe = new FireEngine();

        fe.water();
        Car car = fe; // 형변환 생략
        FireEngine fe2 = (FireEngine) car;
        fe2.water();
    }
}

class Car {
    String color;
    int door;

    void drive() {
        System.out.println("drive");
    }
    void stop() {
        System.out.println("stop");
    }
}

class FireEngine extends Car {
    void water() {
        System.out.println("water");
    }
}

// Output
// water
// water

instanceof 연산자

  • instanceof 연산자를 사용하면 참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아볼 수 있다.
  • instanceof의 왼쪽 참조변수의 값이 null이 아니고 오른쪽에 위치한 타입으로 형변환이 가능하면 true, 아니면 false를 반환한다.
void doWork(Car c) {
    if (c instanceof FireEngine) {
        FireEngine fe = (FireEngine) c;
        fe.water();
    }
}

여러 종류의 객체를 배열로 다루기

  • 조상타입의 참조변수 배열을 사용하면, 조상타입을 상속하는 서로 다른 종류의 객체들을 하나의 배열로 관리할 수 있다.
  • 예를 들어 Product 클래스를 상속하는 Tv, Computer, Audio 클래스가 존재한다면 Product p[] = new Product[10];과 같이 배열을 선언한 뒤, 해당 배열에 Tv, Computer, Audio 객체를 저장할 수 있다.

🍯 Tip!
만약 동적으로 크기가 관리되는 배열을 선언하고 싶다면 Vector클래스를 사용하면 된다.


Source

0개의 댓글