<aside> 💡 목표: 클래스 형변환을 통해 보다 유동적으로 사용할 수 있다.

</aside>


클래스 형변환이란?

<aside> 💡 부모타입으로 자식객첵를 참조하게 되면 부모가 가지고 있던 메소드만 사용할 수 있다. 자식 객체가 가지고 있는 메소드나 속성을 사용하고 싶다면 형변환 해야한다.

</aside>

예시

public class Car {

    public void run() {
        System.out.println("달린다.");
    }
}
public class Bus extends Car {

    public void horn() {
        System.out.println("빵빵.");
    }
}
public class CarExam {

    public static void main(String[] args) {
        Car car = new Bus();
        car.run();
        car.horn();  // 컴파일 오류
    }
}

car는 Bus가 가지고 있는 메소드인 horn를 사용할 수 없다.

(당연한 얘기지만, 본인에게 없는 메소드는 사용할 수 없기때문이다.)

그렇지만, 이를 강제로 사용하는 방법이 2가지가 있다.

이는 다음과 같다.

참조타입으로 형변환

public class CarExam {

    public static void main(String[] args) {
        Car car = new Bus();

        Bus bus = (Bus) car;
        bus.run();
        bus.horn();
    }
}

형변환(cast)

public class CarExam {

    public static void main(String[] args) {
        Car car = new Bus();
        car.run();
        ((Bus) car).horn();
    }
}

형변환은 접근불가하여 컴파일 오류가 발생할 수 있는 문제가 늘 존재하며, 제한적인 편이다.

굳이 사용해야하는 것이 아닌 웬만해서는 사용하지 말아야한다.

public void horn(Car car) {
    ((Bus) car).horn();
}