> Java > java지도 시간 > 비정적 내부 클래스(Java 16 이전)에서 정적 메서드를 정의할 수 없는 이유는 무엇입니까?

비정적 내부 클래스(Java 16 이전)에서 정적 메서드를 정의할 수 없는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-10-31 11:43:02
원래의
894명이 탐색했습니다.

Why Can't You Define Static Methods in Non-Static Inner Classes (Pre-Java 16)?

비정적 내부 클래스의 정적 메서드(Java 16 이전)

Java 16 이전 버전에서는 비정적 내부 클래스 내에서 정적 메서드를 정의하려고 시도합니다. 내부 클래스로 인해 컴파일러 오류가 발생합니다. 이러한 제한은 내부 클래스와 해당 클래스를 포함하는 클래스 간의 고유한 관계에서 비롯됩니다.

이유:

비정적 내부 클래스의 인스턴스는 암시적으로 인스턴스와 연결됩니다. 그것의 둘러싸는 클래스의. 이는 내부 클래스 내의 모든 메소드가 바깥쪽 클래스의 인스턴스 변수 및 메소드에 액세스할 수 있음을 의미합니다. 그러나 정적 메서드는 특정 인스턴스에 속하지 않고 클래스 자체에 속합니다. 따라서 인스턴스 관련 데이터나 메서드에 직접 액세스할 수 없습니다.

예:

다음 코드를 고려하세요.

<code class="java">public class Foo {
    class Bar {
        static void method() {} // Compiler error
    }
}</code>
로그인 후 복사

컴파일러는 method() 메소드가 비정적 내부 클래스 Bar 내에서 정적으로 선언되었기 때문에 오류가 발생합니다. Bar 클래스는 정적이 아니므로 해당 인스턴스는 Foo의 인스턴스와 연결됩니다. 결과적으로 method() 메서드는 Foo 인스턴스와 독립적으로 존재할 수 없습니다.

정적 내부 클래스:

반대로 내부 클래스를 static으로 선언하면 static이 허용됩니다.

<code class="java">public class Foo {
    static class Bar { // now static
        static void method() {}
    }
}</code>
로그인 후 복사

반면에 정적 내부 클래스는 둘러싸는 클래스의 인스턴스와 직접적인 연관이 없습니다. 즉, 해당 메서드는 인스턴스별 데이터나 메서드에 액세스할 수 없습니다. 그러나 바깥쪽 클래스의 정적 멤버에는 계속 액세스할 수 있습니다.

Java 16 :

Java 16 이상에서는 정적 및 비정적 내부 클래스 모두 정의할 수 있습니다. 정적 방법. 이는 정적 메서드에 대한 새로운 수정자가 도입되었기 때문에 개체 인스턴스와 독립적으로 존재할 수 있습니다.

위 내용은 비정적 내부 클래스(Java 16 이전)에서 정적 메서드를 정의할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿