В java внешний класс может быть общедоступным, окончательным, по умолчанию или абстрактным. Почему не Статическая какПочему внешние классы не являются статическими в java?
public static class MyClass{}
В java внешний класс может быть общедоступным, окончательным, по умолчанию или абстрактным. Почему не Статическая какПочему внешние классы не являются статическими в java?
public static class MyClass{}
Внешний класс уже неявно статичным.
Нестатический вложенный класс (= внутренний класс) означает, что внутренний класс неявно имеет ссылку на его родительский класс.
Именно поэтому для вложенного класса вы можете различать статические и нестатические значения. Это не имеет смысла для внешних классов.
Вот пример, чтобы понять разницу между статическим/нестатическим вложенным классом. Вы должны понять, почему это не имеет смысла во внешнем классе.
public class MyClass {
private String anAttributeOfMyClass;
private /*static*/ class MyInnerClass {
public void foo() {
/*
* Here, I can access the attribute of the parent class
* because I implicitly have a reference to it.
* Try to make the nested class static an see the difference.
*/
anAttributeOfMyClass.trim();
}
}
}
вы можете уточнить? это ново для меня –
Как вы описали понятие, оно в любом случае не имеет отношения к статическому классу на других языках, таких как C#, которые не могут быть созданы. – arjacsoh
метод интерфейса является неявным публичным и абстрактным, но даже если мы объявим их публичными и абстрактными, он действителен. Тогда почему неверно объявлять внешний класс как статический, если он неявно статичен? Я не уверен, что следую этому ответу. –
Какую семантику вы ожидаете от статического класса, в отличие от статических членов класса? –
Потому что он избыточен и ничего не выражает, и вызывает ложное ожидание, что отказ от слова «статический» изменяет значение, когда он этого не делает. – EJP
Пожалуйста, прочитайте ответ на свой вопрос: Почему Java-класс не может быть объявлен как статический? на http://stackoverflow.com/a/40015089/2078093 –