2012-03-29 12 views
0

Der folgende Code funktioniert einwandfrei.Warum statische geschachtelte Klasse in java.lang.Thread-Implementierung nicht sichtbar ist?

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."); 
    } 
} 

} 

Warum statische verschachtelte Klasse "statische Klasse WeakClassKey erweitert WeakReference>" in java.lang.Thread Klasse ist nicht mit dem "Thread.WeakClassKey t;" in meiner Klasse? Der Quellcode für java.lang.Thread kann hier gefunden werden: http://www.docjar.com/html/api/java/lang/Thread.java.html [in line # 1984].

Antwort

4

StaticClassL und sind im gleichen Paket und P Standardklasse (d.h. Paket privater) Zugriffsmodifikator. Deshalb ist es zugänglich. WeakClassKey hat den gleichen Modifikator - aber ist in einem anderen Paket. Nur Klassen von java.lang können darauf zugreifen.

6

Weil es keine public Klasse ist.

Dies hat Paketberechtigungen, so dass nur Klassen desselben Pakets darauf verweisen dürfen.

5

Da es keine public oder protected Klasse ist, und daher nicht für Ihren Code sichtbar ist, der in einem anderen Paket ist.

Verwandte Themen