Если я не могу создать экземпляр статического класса, почему я могу создать экземпляр статического внутреннего класса?Почему я могу создать статический внутренний класс?
В коде сильфоне, счетчик статический внутренний класс, но он может быть реализован, как если бы это не было:
public class Task {
static class Counter {
int counter = 0;
void increment() {counter++;}
}
public static void main(String[] args) {
Counter counter1 = new Task.Counter();
Counter counter2 = new Task.Counter();
counter1.increment();
counter2.increment();
counter2.increment();
counter2.increment();
System.out.println("counter1: " + counter1.counter);
System.out.println("counter2: " + counter2.counter);
}
}
Если счетчик не статический класса, он cound быть экземпляром, используя следующий синтаксис:
Counter counter1 = new Task().new Counter();
Counter counter2 = new Task().new Counter();
Но я не могу понять разницу между этими подходами в практических целях.
Возможный дубликат [внутренний класс Java и статический вложенный класс] (http://stackoverflow.com/questions/70324/java-inner-class-and-static-nested-class) – Mark
Спасибо, но я не согласен , потому что упомянутый вопрос объясняет разницу между внутренними и вложенными классами. Я спрашиваю, почему я могу создать статический внутренний класс, как если бы он не был статичным. По моему скромному мнению, это не одно и то же. Но я уважаю вашу точку зрения. – outlookrperson
Это то же самое, что и вызывать 'thread.yield()' или 'Thread.yield()' –