Все классы верхнего уровня по определению являются статическими.
То, к чему сводится static
, - это то, что экземпляр класса может стоять сам по себе.Или наоборот: нестатический внутренний класс (= внутренний класс экземпляра) не может существовать без экземпляра внешнего класса.Поскольку класс верхнего уровня не имеет внешнего класса, он не может быть ничем иным, как static
.
, поскольку все классы верхнего уровня являются статическими и имеют static
Ключевое слово в определении класса верхнего уровня не имеет смысла.
Какой-то код, с которым можно поиграться:
public class Foo {
public class Bar {
// Non-static innner class
}
public static class Baz {
// Static inner class
}
}
public class Example {
public static void main(String[] args) {
new Foo(); // this is ok
new Foo.Baz(); // this is ok
new Foo.Bar(); // does not compile!
Foo f = new Foo();
Foo.Bar bar = f.new Bar(); //this works, but don't do this
}
}
Я добавил туда "но не делай этого", потому что это действительно ужасный дизайн кода.Внутренние классы экземпляра не должны быть видны вне внешнего класса.Они должны использоваться только из внешнего класса.