서로 상속관계에 있는 클래스 사이에서만 가능하며 자손타입의 참조변수를 조상타입으로 조상타입의 참조변수를 자손타입으로의 형변환만 가능하다.
public class ReferTypeTransExam {
FireEngine f = new FireEngine();
Car c = (Car) f;
Car c2 = f; // 자손타입을 조상타입으로 형변환하는 경우 (Car)생략 가능
FireEngine f2 = (FireEngine) c;
// 상속관계가 아니기 때문에 클래스 간 형변환 불가
// Ambulance a = (Ambulance) f; // cannot cast 'FireEngine' to 'Ambulance'
}
class Car {}
class FireEngine extends Car {}
class Ambulance extends Car {}
기본형의 형변환과 달리 참조형의 형변환은 변수에 저장된 값이 변환되는 것은 아니며 그저 참조변수를 다른 종류의 것으로 바꾸는 것뿐이다.
위와 같이 조상타입으로의 형변환을 생략할 수 있는 이유는 조상타입으로 형변환하면 다룰 수 있는 멤버의 개수가 줄어들기 때문에 형변환 시 항상 안전하기 때문이다.
- 서로 상속관계에 있는 타입 간의 형변환은 양방향으로 자유롭게 수행된다.
- 참조변수가 가리키는 인스턴스의 자손타입으로 형변환은 허용되지 않는다.
- 참조변수가 가리키는 인스턴스의 타입이 무엇인지 먼저 확인하는 것이 중요하다.
'Java의 정석' 카테고리의 다른 글
매개변수의 다형성 (0) | 2022.04.12 |
---|---|
instanceof 연산자 (0) | 2022.04.11 |
다형성(polymorphism) (0) | 2022.04.07 |
접근 제어자(access modifier) (0) | 2022.04.06 |
제어자(modifier) (0) | 2022.04.05 |