<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();
}
}
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();
}