>Java >java지도 시간 >Java에서 추상 클래스를 인스턴스화할 수 있습니까?

Java에서 추상 클래스를 인스턴스화할 수 있습니까?

DDD
DDD원래의
2024-12-24 15:57:18294검색

Can Abstract Classes Be Instantiated in Java?

추상 클래스를 인스턴스화할 수 있나요?

인터뷰 중에 추상 클래스를 인스턴스화하는 것이 가능한지 질문을 받았습니다. 전통적으로는 "아니요"라고 대답했습니다. 그러나 면접관은 그것이 가능하다고 말하여 놀랐습니다.

이를 입증하려면 다음 코드를 고려하십시오.

abstract class my {
    public void mymethod() {
        System.out.print("Abstract");
    }
}

class poly {
    public static void main(String a[]) {
        my m = new my() {};
        m.mymethod();
    }
}

my의 추상 수정자에도 불구하고 다음을 사용하여 해당 인스턴스를 생성할 수 있습니다. 익명의 하위 클래스. 본질적으로 즉석에서 하위 클래스를 생성하고 해당 참조를 추상 클래스 참조 m에 할당합니다.

JLS(Java 언어 사양)에 따르면:

"클래스 인스턴스 생성 표현식이 클래스 본문으로 끝나는 경우
인스턴스화되는 클래스는 익명 클래스입니다."

따라서 이 경우 인스턴스화되는 클래스는 다음과 같습니다. 내 것이 아니라 익명의 하위 클래스입니다.

이 동작은 코드를 컴파일하고 생성된 클래스 파일을 확인하여 확인할 수 있습니다. 런타임에 생성된 익명 하위 클래스에 해당하는 Poly$1.class라는 새 클래스 파일을 볼 수 있습니다.

따라서 추상 클래스를 직접 인스턴스화할 수는 없지만 익명 하위 클래스.

위 내용은 Java에서 추상 클래스를 인스턴스화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.