0
package p1;

public class MyClass1 {

      protected static  String str = "ss1";

    }

package p2;

import p1.MyClass1;

public class MyClass2 extends MyClass1 {

     public static void test(){

         MyClass1 mc1 = new MyClass1();

         System.out.println(mc1.str); 

         }

}

私が理解しているように、文字列が別のパッケージからは見えないため、保護されていると宣言されている場合、print ステートメントは機能しません。しかし、 static protected として宣言されている場合に機能するのはなぜですか?

4

5 に答える 5

1

指摘したように、 static は可視性とは何の関係もありません。

あなたの場合、「str」は保護されているとマークされています。つまり、2 種類のクラスがそれを見ることができます: - 同じパッケージ内のクラス - MyClass1 を拡張するクラス

MyClass2 が MyClass1 を拡張するため、コードが機能します。

于 2013-04-05T19:54:17.377 に答える
0
  • publicすべてのクラスから見えることを意味します。
  • protectedパッケージとすべてのサブクラスに表示されることを意味します。
  • (修飾子なし) は、パッケージにのみ表示されることを意味します。
  • privateは、それ自身のクラスでのみ表示されることを意味します。

詳細については、クラスのメンバーへのアクセスの制御を参照してください。

于 2013-04-05T19:55:44.583 に答える
0

静的であるかどうかとは関係ありません。MyClass2 は MyClass1 を拡張するため、メンバーにアクセスできます

于 2013-04-05T19:52:26.387 に答える