Комментарии 13
Интересно а почему нельзя создавать экземпляр статического вложенного класса? Не спец в java, но такие классы по идее должны быть подобны вложенным классам в с++ т.е. они используют объемлющий класс просто как пространство имен.
Вы это все прочитали? Поздравляю :-)
Разумеется, создать экземпляр вложенного класса — можно. Кстати, из такого класса видны любые члены внешнего класса, а не только статические: https://ideone.com/U3c9Qb, так что тут у автора полная ерунда написана...
public class OuterClass {
public String outerStr = "outerStr";
public static class StaticInner{
public static void staticInnerMethod(){
System.out.println(outerStr);
}
public void innerMethod(){
System.out.println(outerStr);
}
}
}
Обе строки «System.out.println(outerStr);» выдают ошибку.
Если сделать outerStr статическим — всё работает нормально
Дык это не видимость, а вы не указали объект. Должно быть что-то вроде
OuterClass oc;
…
System.out.println(oc.outerStr);
(я, если что, Java по сути не знаю, но ошибка не привязана к языку; простой способ понять — написать обращения к полям через this и подумать, что должно быть вместо него в данном случае)
После компиляции количество файлов будет равно количеству не вложенных классов.
public class A {
}
class B {
}
class C {
}
Таким образом, если вы вызывате приватный метод внешнего класса, вы на самом деле вызываете 2 метода, accessor и тот, к которому требуется доступ.
Сделано это потому, что в Java после компиляции нет понятия Inner класса. Inner класс всего лишь станет package классом в том же пакете, рядом с внешним классом.
Вложенные классы в Java