Java

자바 프로그래밍 (Java) - 29 : 다운캐스팅 (Downcasting)과 ClassCastException

n.han 2016. 7. 13. 17:05

2) 다운 캐스팅(Down casting)

 

하위 클래스 데이터 타입으로 형 변환하는 것을 down casting이라고 한다.

 

주의할 점은 업캐스팅 되기 전의 클래스로만 다운 캐스팅할 수 있다.

 

예를 들어 아래 예에서 sender[0] 인스턴스를 SMSSender로 다운 캐스팅할 수 없다.

 

abstract  class MessageSender {

    public void test(){

        System.out.println("message");

    }   

}

public class EMailSender extends MessageSender {

        public String type = "EMail";

}

public class SMSSender extends MessageSender {

        public String type = "SMS";

}

public class MainClass {

        public static void main(String args[]) {

        MessageSender [] senders = {new EMailSender(), new SMSSender()};

        System.out.println(((EMailSender)senders[0]).type);

        System.out.println(((SMSSender)senders[1]).type);

    }

}

 

- 잘못된 다운 캐스트와 ClassCastException

 

컴파일 타임에는 초기화했는 지 여부와 데이터 타입이 맞는 지 검사해준다.

 

따라서 다운 캐스팅 할 때 잘못된 다운 캐스팅을 했는 지의 여부는 런타임 시 체크하고, 잘못된 경우 런타임 에러가 발생한다.

 

즉 컴파일은 성공한다.

 

아래 예제는 다운 캐스팅의 잘못된 예이다. ClassCastException이 발생한 것을 볼 수 있다.

 

이를 해결하기 위해서는 처음부터’ Student() Student의 인스턴스를 만들어야 한다.

 

public class MainClass {

        public static void main(String args[]) {

               Person ps = new Person();

               ps = (Student)ps;

        }

}

Exception in thread "main" java.lang.ClassCastException: ch06.Person cannot be cast to ch06.Student

        at ch06.MainClass.main(MainClass.java:6)