3

Java のマルチレベル継承に関する質問があります。3 つのクラスはすべて同じパッケージに含まれています

私はクラス A を持っています:

public class A {
   protected int x;
}

public class B extends A {
   public void doSomething {
      // x is visible.agreed, as it is a direct subclass of A
   }  
}


public class C extends B {
   public void doSomething {
      // x is still visible, how come? I mean it is at the 2nd level 
     //  I am confused why?
   }  
}

それは何か意味がありますか?または、デフォルトで取らなければならないのは動作ですか?

4

7 に答える 7

5

修飾子でマークされた変数/メソッドはprotected、同じパッケージ内のすべてのクラスと、異なるパッケージ内のサブクラスにのみ表示されます。以下は例です。

package a;
class A{
protected int x;
}
class B extends A{
//x can be accessed from this class
} 

class C extends B {
//x can be accessed from this class
}
class D{
//x can be accesed this class but you will have to create A's instance 
}

package B 
class One {
//cannot access x from this class
}
class Two extends A {
//can access x from this class
}
于 2012-11-05T22:11:15.967 に答える
5

Javaのアクセスレベル修飾子は次のとおりです。

  • public-すべてのコードに表示
  • protected-同じパッケージ内のすべてのコードと、パッケージに関係なくサブクラスに表示されます
  • なし(デフォルト)-同じパッケージ内のすべてのコードに表示
  • private-同じクラス(ネストされたクラスを含む)のコードにのみ表示されます

たとえば、Javaチュートリアル「クラスのメンバーへのアクセスの制御」または(多くの技術的な詳細については)Java言語仕様のセクション6.6を参照してください。

于 2012-11-05T22:12:01.537 に答える
5

キーワードの定義

保護されています

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

これを読むことをお勧めします。

于 2012-11-05T22:12:07.840 に答える
4

Javaprotectedキーワードは、すべてのサブクラス(およびパッケージのメンバー)まで機能します。にメンバーがいる場合は、どのオブジェクトからでもアクセスできます。対照的に、ローカルクラス(および内部クラス)にのみ表示され、すべてのユーザーがアクセスできます。protectedObjectprivatepublic

メンバーとメソッドがどのように継承されるかを詳細に示したこの用語集と、継承に関するJavaドキュメントをご覧ください。protected

于 2012-11-05T22:10:49.747 に答える
3

サブクラスのメンバーへのアクセスを制限することはできません。このルールはメソッドに適用されます(メソッドをオーバーライドpublicして作成することはできませんprivate)が、ここで類推を見ることができます。フィールドがの場合、どんなに深くてprotectedも、すべてのサブクラスにあります。protectedもちろん、Javaのフィールドをオーバーライドすることはできませんが、概要を説明するためだけに使用します。

于 2012-11-05T22:11:57.700 に答える
3

これを参照してください:http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

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

したがって、クラスがパッケージをCとと共有する場合、そのアクセス可能です。AB

于 2012-11-05T22:12:11.880 に答える