
클래스 형변환의 예시를 들어보자.
형변환 예시에 앞서 부모 타입으로 자식의 객체를 참조하는건 가능하다.
// Car = Parent, Bus = Child
// 아래 경우가 부모타입으로 자식의 객체를 참조하는 경우
Car c = new Bus();
하지만 이 경우 부모가 가지고 있는 내용만 사용 가능하다.
(메서드는 부모가 알고있는 메서드만 사용 가능하다.)
부모가 가지고 있지 않고 자식만 갖고 있는 메서드는 사용 불가하다는 말이다.
그렇기에 형변환한다.
자식의 객체를 참조하는건 가능하다 자식만 갖고 있는 메서드는 사용이 불가하기 때문이다.
public class Car {
String name;
int carNumber;
public void attach10(int carNumber){
String finalCarNumber="10" + Integer.toString(carNumber) ;
System.out.println(finalCarNumber);
}
public void bigLetter(String name){
String finalLetter=name.toUpperCase();
System.out.println(finalLetter);
}
}
public class Bus extends Car{
public void attach10(int carNumber){
super.attach10(carNumber);
System.out.println("Bus");
}
public void soundBus(){
System.out.println("부릉부릉");
}
}
public class BudExam {
public static void main(String[] args) {
Car c = new Bus();
c.attach10(2345);
Bus bus = (Bus) c;
((Bus) c).soundBus();
}
}
아래 적힌 부분이 형변환 부분이다.
Car 타입을 강제로 Bus 타입으로 바꿔주었다.
Car c = new Bus();
...
Bus bus = (Bus) c;

형변환 하기 전에는 soundBus( ) 에 오류가 뜨는 것을 볼 수 있다.
하지만 형변환 후에 soundBus( ) 는 호출해도 오류가 뜨지 않는 것을 볼 수 있다.
형변환은 상위(=부모) 가 하위(=자식) 을 참조할 수 있어도 반대는 안된다.
원래 객체가 Bus 였기 때문에 형변환 가능했던 것이고
원래 Car 이었으면 형변환 불가하다.
public class BudExam {
public static void main(String[] args) {
Car c = new Car();
c.attach10(2345);
Bus bus = (Bus) c;
((Bus) c).soundBus();
}
}
이렇게 되면 오류가 뜬다.
Bus는 하위 클래스라 상위 클래스인 Car 를 담을 수 없다.
쉽게 말해 그릇의 크기가 달라서 작은 그릇에 큰 것을 담을 수 없는 것이다.
Car c = new Bus();