참조변수의 형변환
< 설명 >
조상 클래스 : Car / 자손 클래스 : FireEngine , Ambulance
참조변수 f 는 FireEngine클래스 타입이다.
참조변수 c 는 Car클래스 타입이다.
참조변수 f2 는 FireEngine클래스 타입이다.
참조변수 a 는 Ambulance클래스 타입이다.
Car c = (Car) f ;
참조변수 c 에 f를 대입하였는데 둘의 타입이 다르므로 참조변수 f에 (Car) f 로 형변환을 해주어야한다.
// 조상인 타입으로 형변환을 할 때는 생략가능하다.
참조변수는 값을 넣어주는 것이 아니라 주소를 넣어주므로 참조변수 f와 c의 주소가 같다는 것을 의미한다.
그러나 f는 FireEngine클래스 타입이기 때문에 5가지의 기능을 사용할 수 있고,
c 는 Car클래스 타입이기 때문에 4가지 기능만 사용할 수 있다.
FireEngine f2 = (FireEngine) c ;
참조변수 f2에 c를 대입하였는데 둘의 타입이 다르므로 참조변수 c에 (FireEngine) c 로 형변환을 해주어야 한다.
// 자손인 타입으로 형변환을 할 때는 생략이 불가능하다.
참조변수는 값을 넣어주는 것이 아니라 주소를 넣어주므로 참조변수 f2와 c의 주소가 같다는 것을 의미한다. + f의 주소와도 같음.
그러나 f2는 FireEngine클래스 타입이기 때문에 5가지의 기능을 사용할 수 있다.
Ambulance a = (Ambulance) f ;
참조변수의 형변환은 조상 자손 클래스 관계에서만 가능하다.
Ambulance클래스와 FireEngine클래스는 둘다 Car클래스의 자손이므로 서로 형변환이 불가하여 에러가 난다.
형변환을 통해서 각 참조변수의 멤버사용 갯수를 조절할 수 있기 때문에 사용한다.
형변환할 때는 실제 인스턴스가 무엇인지가 중요하다.
실제 인스턴스의 멤버 갯수가 넘지 않도록 형변환해야한다.
(인스턴스가 null이면 에러 발생, 형변환 타입에 비해 실제 가리키는 객체의 멤버가 적다면 에러 발생.)