본문 바로가기

Java의 정석

참조변수의 형변환

서로 상속관계에 있는 클래스 사이에서만 가능하며 자손타입의 참조변수를 조상타입으로 조상타입의 참조변수를 자손타입으로의 형변환만 가능하다.

 

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