추상 클래스의 인스턴스화
인터뷰 시나리오에서 추상 클래스를 인스턴스화할 수 있는지에 대한 질문이 발생할 수 있습니다. 전통적으로 대답은 추상 클래스가 개념이나 불완전한 정의를 나타내기 때문에 인스턴스화할 수 없다는 것입니다. 그러나 최근 인터뷰 일화는 이러한 개념에 도전합니다.
인터뷰 퍼즐
인터뷰 도중 후보자에게 추상 클래스를 인스턴스화하는 것이 가능한지 질문을 받았습니다. 초기 반응은 "아니요"였지만 면접관은 시연으로 반박했습니다. 다음 코드가 제시되었습니다.
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 = new My() {};
여기 , 우리는 추상 클래스 My의 인스턴스를 직접 생성하지 않습니다. 대신 My의 익명 하위 클래스 인스턴스를 생성합니다. 익명 하위 클래스는 컴파일러에 의해 즉석에서 생성되는 이름 없는 하위 클래스입니다. 이 익명 하위 클래스는 추상 메소드 myMethod()를 구현합니다.
객체 생성 프로세스
이 동작을 이해하려면 JLS(Java 언어 사양)를 참조하세요. 12.5절에서는 객체 생성 프로세스를 설명합니다. 새 객체가 생성되면 객체와 해당 슈퍼클래스의 인스턴스 변수에 메모리가 할당됩니다. 객체 참조를 반환하기 전에 생성자를 처리하여 객체를 초기화합니다.
컴파일 증거
익명 하위 클래스의 존재를 추가로 입증하기 위해 코드를 컴파일할 수 있습니다. . 다음 클래스 파일이 생성됩니다:
익명의 하위 클래스 클래스 파일(Poly$1.class)은 우리가 하위 클래스의 인스턴스를 생성하고 있다는 증거입니다.
결론
직관에 반하는 것처럼 보일 수도 있지만 익명 하위 클래스를 생성하여 추상 클래스를 인스턴스화할 수 있습니다. 이 동작은 JVM(Java Virtual Machine)에 의해 활성화되며, 이를 통해 익명 하위 클래스를 즉시 생성할 수 있습니다. 그러나 우리가 생성하는 객체는 여전히 추상 클래스가 아닌 익명 하위 클래스의 인스턴스라는 점을 기억하는 것이 중요합니다.
위 내용은 Java에서 추상 클래스를 인스턴스화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!