PHP中文网2017-04-17 17:52:33
으아악
Java 6 언어 사양의 개인 수정자 설명, 최상위 클래스 및 내부 클래스 정의
6.6.1
멤버 또는 생성자가 비공개로 선언된 경우 멤버 또는 생성자의 선언을 포함하는 최상위 클래스(§7.6)의 본문 내에서 발생하는 경우에만 액세스가 허용됩니다.
클래스의 멤버나 생성자가 비공개로 선언된 경우 해당 멤버나 생성자를 선언한 최상위 클래스만 액세스할 수 있습니다. (물론 멤버와 생성자를 선언한 클래스에도 액세스할 수 있습니다.)8.
최상위 클래스는 중첩 클래스가 아닌 클래스입니다.
중첩 클래스는 중첩 클래스가 아닌 다른 클래스 또는 인터페이스의 본문 내에서 선언이 발생하는 클래스입니다.
최상위 클래스는 중첩 클래스(내부 클래스)가 아닙니다. 중첩 클래스(내부 클래스)는 다른 클래스나 인터페이스에서 선언된 클래스입니다
위 설명에 따르면 외부 클래스는 생성자가 비공개로 표시된 TestMath 내부 클래스에 액세스할 수 있습니다.
TestMath1은 또 다른 내부 클래스 TestMath를 상속하는 내부 클래스이기도 합니다. 내부 클래스는 존재하는 외부 클래스 인스턴스 객체에 의존하기 때문에 암시적으로 외부 클래스 인스턴스와 연결됩니다.
그래서
은
로 쓸 수 있습니다. 으아악이는 내부 클래스의 하위 클래스가 상위 클래스의 비공개 생성자에 액세스할 수 있는 이유를 설명할 수 있습니다
怪我咯2017-04-17 17:52:33
일반적으로 하위 클래스는 상위 클래스의 비공개 생성자를 호출할 수 없습니다.
여기 있는 두 클래스는 모두 동일한 클래스의 멤버 내부 클래스입니다. 내부 클래스는 비공개 클래스이더라도 외부 클래스의 멤버 변수에 자유롭게 액세스할 수 있습니다. 따라서 멤버 내부 클래스는 다른 멤버 내부 클래스에 접근할 수 있으며(멤버 변수로 간주될 수 있으므로), 접근된 멤버 내부 클래스는 접근하는 멤버 내부 클래스로부터 완전히 보호되지 않습니다.
大家讲道理2017-04-17 17:52:33
내부 클래스는 본질적으로 모든 외부 클래스의 비공개 메서드 및 필드에 액세스할 수 있습니다. TestMath1이 상속한 TestMath는 그 자체가 UnSafeSequence의 내부 클래스이므로 TestMath1은 비공개 메서드 및 필드를 포함하여 UnSafeSequence에 정의된 모든 비공개 메서드 및 필드에 액세스할 수 있습니다. TestMath 필드에서.
UnSafeSequence 외부에서 TestMath를 별도로 정의하면 TestMath1은 TestMath의 비공개 메서드와 필드에 액세스할 수 없습니다.