참조변수의 형변환
- 사용할 수 있는 멤버의 개수를 조절하는 것
- 조상 자손 관계의 참조변수는 서로 형변환 가능
FireEngine f = new FireEngine();
Car c = (Car)f;
FireEngine f2 = (FireEngine)c;
Ambulance a = (Ambulance)f;
- Car의 멤버변수 : 4 , FireEngine의 멤버변수 : 4+1(본인) = 5
-> 형변환을 통해 멤버변수가 4, 5로 변환이 가능한 것
- Car는 조상, FireEngine은 자손
- Car에는 4개의 멤버변수, FireEngine에는 1개의 멤버변수 (water 메서드)
class Ex {
public static void main(String args[]) {
Car car = null;
FireEngine fe = new FireEngine();
FireEngine fe2 = null;
fe.water();
car = fe;
car.water();
fe2 = (FireEngine)car;
fe2.water();
}
}
class Ex {
public static void main(String args[]) {
Car car = null;
FireEngine fe = new FireEngine();
FireEngine fe2 = (FireEngine)car;
Car car2 = (Car)fe2;
car2.drive();
}
}
- 조상 -> 자손으로 형변환 할 때는
실제 객체
가 무엇인지 중요
class Ex {
public static void main(String args[]) {
Car c = new Car();
FireEngine fe = (FireEngine)c;
fe.water();
}
- 위 예시에서 Car 인스턴스를 생성했기 때문에 Car의 멤버 변수 (4개)를 벗어나면 안된다.
실제 인스턴스의 멤버 개수 내에서만 형변환이 가능!
내부적으로 형변환은 되지만 실제 실행하였을 때는 에러가 발생하기 때문에 하면 안된다.
형변환도 중요하지만 참조변수가 가리키는 실제 인스턴스(객체)가 무엇인지 확인하여 그 인스턴스의 멤버변수를 벗어나지 않는 선에서 형변환이 이루어져야한다!