Следующий код работает отлично.
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 расширяет WeakReference>" в java.lang.в моем классе?
Исходный код для java.lang.Thread можно найти здесь: http://www.docjar.com/html/api/java/lang/Thread.java.html [в строке # 1984].
Поскольку это не класс public.
public
static class WeakClassKey
Это имеет привилегии пакета, поэтому только классы в одном пакете могут ссылаться на него.
Поскольку это не класс public или protected, и, следовательно, он не виден вашему коду, который находится в другом пакете.
protected
StaticClass и L находятся в одном пакете, а класс P имеет модификатор доступа по умолчанию (т.е. package private )Вот почему это доступно.WeakClassKey имеет тот же модификатор - но находится в другом пакете.Только классы из java.lang могут получить к нему доступ.
StaticClass
L
P
WeakClassKey
java.lang