본문 바로가기
JAVA & Spring/Error

[Java] Exception in thread "main" java.lang.ClassCastException 오류 해결 방법

by 알기 쉬운 코딩 사전 2024. 11. 21.
반응형

🚨 Java 실행시 발생한 에러 메시지

Exception in thread "main" java.lang.ClassCastException: class poly.basic.Parent cannot be cast to class poly.basic.Child (poly.basic.Parent and poly.basic.Child are in unnamed module of loader 'app') at poly.basic.CastingMain4.main(CastingMain4.java:11)

 

 에러 발생 이유

다운캐스팅(DownCasting)이 불가능한 경우에 다운캐스팅을 강제로 하여 캐스팅이 실패하여 나타나는 오류 메시지입니다.

즉, Class 간의 캐스팅이 실패하여 나타나는 오류 메시지입니다.

 

✅  해결 방법

다운캐스팅이 불가능한 경우를 항상 고려하여 소스 코드를 작성합니다.

아래 코드와 설명문을 참고해 주세요.

 
Parent.java

public class Parent {
    public void parentMethod() {
        System.out.println("Parent.parentMethod");
    }
}

 
Child.java

public class Child extends Parent {
    public void childMethod() {
        System.out.println("Child.childMethod");
    }
}

 
 
CastingMain.java

public class CastingMain {
    public static void main(String[] args) {
        Parent parent1 = new Parent();
        // Child child1 = (Child) parent1; // 런타임 오류 - ClassCastException
        // child1.childMethod(); // 실행 불가
        
        Parent parent2 = new Child();
        Child child2 = (Child) parent2;
        child2.childMethod();
    }
}

 
Child 클래스는 Parent 클래스를 상속받아 사용합니다.
 
하지만 위의 CastingMain에서 Parent 변수인 parent1을
강제로 Child 변수인 child1로 다운 캐스팅(DownCasting) 시킬 시 발생하는 에러 메시지입니다.

참고: parent 변수는 Parent 인스턴스만 존재합니다.
즉, parent 변수에 Child 인스턴스가 없기 때문에 해당 에러가 발생합니다.

하지만 child 변수의 경우에는 Child 인스턴스와 Parent 인스턴스 2개가 존재합니다.

 

반응형

댓글