1
class SomeClass1 {
  void method1() { }
  public void method2() { }
  private void method3() { }
  protected void method4() { }
}
class DemoClass{
  public static void main(String[] parameters) {
    SomeClass1 sc = new SomeClass1();
    sc.method1();
    sc.method2();
    sc.method4();
  }
}

保護されたメソッドは、スーパー クラスを継承するクラスによってのみアクセスできます。ここでわかるように、DemoClass は SomeClass を拡張しません。それでも、保護されたメソッドにアクセスできます。これはどのように可能ですか?

4

2 に答える 2

11

これは、それらが同じパッケージに含まれているためです。

このprotected修飾子は、メンバーが (package-private と同様に) 独自のパッケージ内でのみアクセスできることを指定し、さらに、別のパッケージ内のそのクラスのサブクラスによってアクセスできることを指定します。

(ドキュメントへのリンク)。

于 2013-02-18T00:56:50.117 に答える
2

Java では、デフォルト、パブリック、保護、およびプライベートの違いを参照してください。

基本的に、protected はクラス、サブクラス、およびパッケージからアクセスできます。2 つのクラスは同じパッケージに含まれているため、エラーは発生しません。

于 2013-02-18T00:58:23.413 に答える