java - 为什么子类可以调用父类的私有构造方法
高洛峰
高洛峰 2017-04-17 17:50:33
0
3
419

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全員に返信(3)
洪涛

リーリー

Java 6 言語仕様におけるプライベート修飾子の説明、トップレベルクラスと内部クラスの定義

6.6.1
メンバーまたはコンストラクターがプライベートと宣言されている場合、メンバーまたはコンストラクターの宣言を囲む最上位クラス (§7.6) の本体内でそれが発生する場合に限り、アクセスが許可されます。
クラスのメンバーまたはコンストラクターがプライベートと宣言されている場合、そのメンバーまたはコンストラクターを宣言している最上位クラスのみがアクセスできます (もちろん、メンバーとコンストラクターを宣言しているクラスもアクセス可能です)

8.
トップレベルのクラスは、ネストされたクラスではないクラスです。
ネストされたクラスとは、ネストされたクラスではない別のクラスまたはインターフェイスの本体内で宣言が行われるクラスです。
最上位クラスはネストされたクラス (内部クラス) ではありません。ネストされたクラス (内部クラス) は、他のクラスまたはインターフェイスで宣言されたクラスです。

上記の説明を考慮すると、外部クラスは、コンストラクターがプライベートとしてマークされている TestMath 内部クラスにアクセスできます。
TestMath1 も内部クラスであり、別の内部クラス TestMath を継承します。内部クラスは外部クラス インスタンス オブジェクトの存在に依存するため、外部クラス インスタンス
に暗黙的に関連付けられます。 リーリー

と書くことができます リーリー

これは、内部クラスのサブクラスがその親クラスのプライベート コンストラクターにアクセスできる理由を説明できます

いいねを押す +0
刘奇

一般に、サブクラスは親クラスのプライベート コンストラクターを呼び出すことはできません。
ここにある 2 つのクラスはどちらも同じクラスのメンバー内部クラスであり、内部クラスは外部クラスのメンバー変数に自由にアクセスできます。したがって、メンバー内部クラスは別のメンバー内部クラスにアクセスできます (メンバー変数とみなすことができるため)。アクセスされたメンバー内部クラスは、それにアクセスするメンバー内部クラスから完全に保護されません。

いいねを押す +0
大家讲道理

内部クラスは本質的に、任意の外部クラスのプライベート メソッドとフィールドにアクセスできます。TestMath1 は、UnSafeSequence の内部クラスとして TestMath 自体を継承するため、TestMath1 は、TestMath のプライベート メソッドとフィールドを含む、UnSafeSequence で定義されたプライベート メソッドとフィールドにアクセスできます。 。 分野。

UnSafeSequence の外側で TestMath を個別に定義すると、TestMath1 は TestMath のプライベート メソッドとフィールドにアクセスできなくなります。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート