PHP中文网2017-04-17 17:52:33
リーリー
Java 6 言語仕様におけるプライベート修飾子の説明、トップレベルクラスと内部クラスの定義
6.6.1
メンバーまたはコンストラクターがプライベートと宣言されている場合、メンバーまたはコンストラクターの宣言を囲む最上位クラス (§7.6) の本体内でそれが発生する場合に限り、アクセスが許可されます。
クラスのメンバーまたはコンストラクターがプライベートと宣言されている場合、そのメンバーまたはコンストラクターを宣言している最上位クラスのみがアクセスできます (もちろん、メンバーとコンストラクターを宣言しているクラスもアクセス可能です)8.
トップレベルのクラスは、ネストされたクラスではないクラスです。
ネストされたクラスとは、ネストされたクラスではない別のクラスまたはインターフェイスの本体内で宣言が行われるクラスです。
最上位クラスはネストされたクラス (内部クラス) ではありません。ネストされたクラス (内部クラス) は、他のクラスまたはインターフェイスで宣言されたクラスです。
上記の説明を考慮すると、外部クラスは、コンストラクターがプライベートとしてマークされている TestMath 内部クラスにアクセスできます。
TestMath1 も内部クラスであり、別の内部クラス TestMath を継承します。内部クラスは外部クラス インスタンス オブジェクトの存在に依存するため、外部クラス インスタンス
に暗黙的に関連付けられます。
リーリー
と書くことができます リーリー
これは、内部クラスのサブクラスがその親クラスのプライベート コンストラクターにアクセスできる理由を説明できます怪我咯2017-04-17 17:52:33
一般に、サブクラスは親クラスのプライベート コンストラクターを呼び出すことはできません。
ここにある 2 つのクラスはどちらも同じクラスのメンバー内部クラスであり、内部クラスは外部クラスのメンバー変数に自由にアクセスできます。したがって、メンバー内部クラスは別のメンバー内部クラスにアクセスできます (メンバー変数とみなすことができるため)。アクセスされたメンバー内部クラスは、それにアクセスするメンバー内部クラスから完全に保護されません。
大家讲道理2017-04-17 17:52:33
内部クラスは本質的に、任意の外部クラスのプライベート メソッドとフィールドにアクセスできます。TestMath1 は、UnSafeSequence の内部クラスとして TestMath 自体を継承するため、TestMath1 は、TestMath のプライベート メソッドとフィールドを含む、UnSafeSequence で定義されたプライベート メソッドとフィールドにアクセスできます。 。 分野。
UnSafeSequence の外側で TestMath を個別に定義すると、TestMath1 は TestMath のプライベート メソッドとフィールドにアクセスできなくなります。