2012-03-29 6 views
0

次のコードは完全に機能します。 java.lang.Threadのクラスでjava.lang.Thread実装の静的ネストされたクラスが表示されないのはなぜですか?

public class StaticClass { 

public static void main(String[] args) { 
    L.P h = new L.P(); 
    h.show(); 

} 

} 

class L { 

static class P { 
    public void show() { 
     System.out.println("This is static nested class."); 
    } 
} 

} 

次に静的ネストされたクラス、なぜ「静的クラスWeakClassKeyが弱い参照を拡張するには>」によってアクセスできません「Thread.WeakClassKeyのT;」私のクラスで?

java.lang.Threadのソースコードはhttp://www.docjar.com/html/api/java/lang/Thread.java.html [in line#1984]にあります。

答えて

4

StaticClassLは、同じパッケージにあり、Pクラスがデフォルト(プライベートすなわちパッケージ)のアクセス修飾子を持っています。それがアクセス可能な理由です。 WeakClassKeyは同じ修飾語を持ちますが、別のパッケージに含まれています。 java.langのクラスのみがアクセスできます。

6

これはpublicクラスではないためです。

static class WeakClassKey 

これにはパッケージ特権があるので、同じパッケージ内のクラスだけが参照できるようになります。

5

これはpublicクラスまたはprotectedクラスではないため、別のパッケージにあるコードでは表示されないためです。

関連する問題