상속 챕터에서와 마찬가지로, 인터페이스 타입 객체와 구현 클래스 간에 강제 타입 변환(casting)을 시도할 때 자동 변환된 타입의 원본 타입에 오류가 있다면 ClassCastException이 발생하게 됩니다. 이를테면 구현 클래스 Taxi가 Vehicle 인터페이스 타입으로 변환되어 인터페이스 변수에 대입되었는데, Bus 타입으로 캐스팅을 시도한다면 오류가 발생하겠지요.
그래서 캐스팅이 필요한 경우에는 역시 instanceof 키워드를 사용하여 true일 경우에만 실행하는 조건을 주는 것이 안전합니다.
if(vehicle instanceof Bus) {
Bus bus = (Bus) vehicle;
}
기존 인터페이스 Vehicle과 Driver 클래스를 활용한 예제를 수정해 instanceof를 사용해보도록 하겠습니다.
public interface Vehicle {
public void run();
}
public class Bus implements Vehicle {
@Override
public void run() {
System.out.println("Bus runs.");
}
public void checkTicket() {
System.out.println("Ticket Approved.");
}
}
public class Driver {
public void drive(Vehicle vehicle) {
vehicle.run();
}
}
public class ExampleMain {
public static void main(String[] args) {
Driver drive = new Driver();
drive.drive(new Bus());
}
}
'Programming > JAVA' 카테고리의 다른 글
인터페이스(12) - 디폴트 메서드와 인터페이스의 확장 (0) | 2023.03.29 |
---|---|
인터페이스(11) - 인터페이스의 상속 (0) | 2023.03.28 |
인터페이스(9) - 인터페이스 파라미터의 다형성 & Casting (0) | 2023.03.26 |
인터페이스(8) - 인터페이스의 타입 변환과 다형성 3(배열 객체) (0) | 2023.03.25 |
인터페이스(8) - 인터페이스의 타입 변환과 다형성 2 (0) | 2023.03.24 |