JAVA

참조변수의 형변환

오선지♬ 2022. 2. 28. 16:09
728x90
반응형

출처 : 자바의 정석

< 설명 >

조상 클래스 : 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이면 에러 발생, 형변환 타입에 비해 실제 가리키는 객체의 멤버가 적다면 에러 발생.)

 

 

728x90
반응형