1

私はJavaを学んでいて、private修飾子がバインディングにどのように影響するかを理解しようとしています。protectedpublic

私はこのコードを書きました:

public class A {

    public void a() {
        System.out.println("a in A.");
        b();
    }

    private void b() {
        System.out.println("b in A.");
    }


    public static void main(String[] args) {
        B obj = new B();
        obj.a();
    }
} 

class B extends A {
    public void b() {
        System.out.println("b in B.");
    }
}

出力は次のとおりです。

a in A.
b in A.

それでもB独自のbメソッドをobj持ち、Bのインスタンスです。出力が次のようにならないのはなぜですか?

a in A.
b in B.

しかし、bメソッドをA次のように変更すると:

public void b() {
    System.out.println("b in A.");
}

出力は期待どおりに変わります。

a in A.
b in B.

では、キーワード in でb宣言すると、仮想関数のように動作しないのはなぜですか?privateA

4

2 に答える 2

1

それは、JLSによると、

プライベート クラス メンバーまたはコンストラクターは、メンバーまたはコンストラクターの宣言を囲む最上位クラス (§7.6) の本体内でのみアクセスできます。サブクラスには継承されません。

したがって、上記はあなたの質問に答えます。しかし、保護または公開のケースがあった場合、これは有効です。

class Ex{
   protected void a()
   {        
   }
} 


 class Child extends Ex{
    @Override
    public void a()
    {

    }
 }
`
于 2012-11-21T06:19:17.447 に答える