検索

ホームページ  >  に質問  >  本文

java - 为什么子类可以调用父类的私有构造方法

高洛峰高洛峰2887日前424

全員に返信(3)返信します

  • PHP中文网

    PHP中文网2017-04-17 17:52:33

    リーリー

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

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

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

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

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

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

    返事
    0
  • 怪我咯

    怪我咯2017-04-17 17:52:33

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

    返事
    0
  • 大家讲道理

    大家讲道理2017-04-17 17:52:33

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

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

    返事
    0
  • キャンセル返事