У меня есть три вопроса.
1- Как можно использовать неконечные поля в классе анонимного класса, если их значение может измениться?
class Foo{
private int i;
void bar(){
i = 10
Runnable runnable = new Runnable (){
public void run (){
System.out.println(i); //works fine
}//end method run
}//end Runnable
}//end method bar
}//end class Foo
2- Почему статические вложенные классы не могут быть объявлены внутри методов, поскольку внутренние классы могут иметь имя (локальные классы)?
Class Foo {
void bar(){
class LocalClass{ //static nested classes are NOT allowed here
//define members
}//end class LocalClass
}//end method bar
}//end class Foo
3- Почему внутренний класс не может определять статические члены, кроме статических конечных полей?
class Foo {
class Bar{
static int x; //NOTallowed
static final int y; //allowed
static void doSomething(){} //NOT allowed
}//end class Bar
}//end class Foo
Что касается третьего вопроса, я знаю, что внутренние классы связаны с экземплярами их внешних классов, но для меня это все еще неубедительный ответ. Мы могли бы просто использовать что-то вроде new Foo().Bar.doSomething();
, если бы были разрешены статические методы.