InstantiationError — 추상 클래스나 인터페이스를 new로 만들려 할 때

InstantiationError — 추상 클래스나 인터페이스를 new로 만들려 할 때

InstantiationError는 애플리케이션이 자바의 new 연산자로 추상 클래스(abstract class)나 인터페이스(interface) 를 인스턴스화하려 할 때 던져지는 에러예요.

출처: Java API Reference

본문

추상 클래스나 인터페이스는 본질적으로 인스턴스를 직접 만들 수 없는 타입이에요. 평소에는 컴파일러가 이런 시도를 막아 주지만, 클래스 정의가 비호환적으로 바뀌어 런타임에서야 이 문제가 드러나는 경우가 있어요. 예를 들어 어떤 클래스가 원래 구체 클래스였다가 추상 클래스로 바뀌었는데, 옛 바이너리가 그걸 그대로 new 하려 하면 이 에러가 나요.

상속 구조는 다음과 같아요.

java.lang.Object
  java.lang.Throwable
    java.lang.Error
      java.lang.LinkageError
        java.lang.IncompatibleClassChangeError
          java.lang.InstantiationError

IncompatibleClassChangeError의 하위 클래스라는 점에서 알 수 있듯이, 이 에러도 "클래스 정의가 바뀌어 생긴 링크 문제" 계열이에요.

생성자

  • InstantiationError() — 상세 메시지 없이 생성해요.
  • InstantiationError(String s) — 지정된 상세 메시지로 생성해요.

더 알아보기 (Learn more)