拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
リーリー
Java 6 言語仕様におけるプライベート修飾子の説明、トップレベルクラスと内部クラスの定義
6.6.1 メンバーまたはコンストラクターがプライベートと宣言されている場合、メンバーまたはコンストラクターの宣言を囲む最上位クラス (§7.6) の本体内でそれが発生する場合に限り、アクセスが許可されます。 クラスのメンバーまたはコンストラクターがプライベートと宣言されている場合、そのメンバーまたはコンストラクターを宣言している最上位クラスのみがアクセスできます (もちろん、メンバーとコンストラクターを宣言しているクラスもアクセス可能です) 8.トップレベルのクラスは、ネストされたクラスではないクラスです。ネストされたクラスとは、ネストされたクラスではない別のクラスまたはインターフェイスの本体内で宣言が行われるクラスです。 最上位クラスはネストされたクラス (内部クラス) ではありません。ネストされたクラス (内部クラス) は、他のクラスまたはインターフェイスで宣言されたクラスです。
6.6.1 メンバーまたはコンストラクターがプライベートと宣言されている場合、メンバーまたはコンストラクターの宣言を囲む最上位クラス (§7.6) の本体内でそれが発生する場合に限り、アクセスが許可されます。 クラスのメンバーまたはコンストラクターがプライベートと宣言されている場合、そのメンバーまたはコンストラクターを宣言している最上位クラスのみがアクセスできます (もちろん、メンバーとコンストラクターを宣言しているクラスもアクセス可能です)
8.トップレベルのクラスは、ネストされたクラスではないクラスです。ネストされたクラスとは、ネストされたクラスではない別のクラスまたはインターフェイスの本体内で宣言が行われるクラスです。 最上位クラスはネストされたクラス (内部クラス) ではありません。ネストされたクラス (内部クラス) は、他のクラスまたはインターフェイスで宣言されたクラスです。
上記の説明を考慮すると、外部クラスは、コンストラクターがプライベートとしてマークされている TestMath 内部クラスにアクセスできます。 TestMath1 も内部クラスであり、別の内部クラス TestMath を継承します。内部クラスは外部クラス インスタンス オブジェクトの存在に依存するため、外部クラス インスタンス に暗黙的に関連付けられます。 リーリー
と書くことができます リーリー
一般に、サブクラスは親クラスのプライベート コンストラクターを呼び出すことはできません。 ここにある 2 つのクラスはどちらも同じクラスのメンバー内部クラスであり、内部クラスは外部クラスのメンバー変数に自由にアクセスできます。したがって、メンバー内部クラスは別のメンバー内部クラスにアクセスできます (メンバー変数とみなすことができるため)。アクセスされたメンバー内部クラスは、それにアクセスするメンバー内部クラスから完全に保護されません。
内部クラスは本質的に、任意の外部クラスのプライベート メソッドとフィールドにアクセスできます。TestMath1 は、UnSafeSequence の内部クラスとして TestMath 自体を継承するため、TestMath1 は、TestMath のプライベート メソッドとフィールドを含む、UnSafeSequence で定義されたプライベート メソッドとフィールドにアクセスできます。 。 分野。
UnSafeSequence の外側で TestMath を個別に定義すると、TestMath1 は TestMath のプライベート メソッドとフィールドにアクセスできなくなります。
リーリー
Java 6 言語仕様におけるプライベート修飾子の説明、トップレベルクラスと内部クラスの定義
上記の説明を考慮すると、外部クラスは、コンストラクターがプライベートとしてマークされている TestMath 内部クラスにアクセスできます。
はTestMath1 も内部クラスであり、別の内部クラス TestMath を継承します。内部クラスは外部クラス インスタンス オブジェクトの存在に依存するため、外部クラス インスタンス
に暗黙的に関連付けられます。 リーリー
と書くことができます リーリー
これは、内部クラスのサブクラスがその親クラスのプライベート コンストラクターにアクセスできる理由を説明できます一般に、サブクラスは親クラスのプライベート コンストラクターを呼び出すことはできません。
ここにある 2 つのクラスはどちらも同じクラスのメンバー内部クラスであり、内部クラスは外部クラスのメンバー変数に自由にアクセスできます。したがって、メンバー内部クラスは別のメンバー内部クラスにアクセスできます (メンバー変数とみなすことができるため)。アクセスされたメンバー内部クラスは、それにアクセスするメンバー内部クラスから完全に保護されません。
内部クラスは本質的に、任意の外部クラスのプライベート メソッドとフィールドにアクセスできます。TestMath1 は、UnSafeSequence の内部クラスとして TestMath 自体を継承するため、TestMath1 は、TestMath のプライベート メソッドとフィールドを含む、UnSafeSequence で定義されたプライベート メソッドとフィールドにアクセスできます。 。 分野。
UnSafeSequence の外側で TestMath を個別に定義すると、TestMath1 は TestMath のプライベート メソッドとフィールドにアクセスできなくなります。