2013-09-11 1 views
1

В java внешний класс может быть общедоступным, окончательным, по умолчанию или абстрактным. Почему не Статическая какПочему внешние классы не являются статическими в java?

public static class MyClass{}

+2

Какую семантику вы ожидаете от статического класса, в отличие от статических членов класса? –

+0

Потому что он избыточен и ничего не выражает, и вызывает ложное ожидание, что отказ от слова «статический» изменяет значение, когда он этого не делает. – EJP

+0

Пожалуйста, прочитайте ответ на свой вопрос: Почему Java-класс не может быть объявлен как статический? на http://stackoverflow.com/a/40015089/2078093 –

ответ

4

Внешний класс уже неявно статичным.

Нестатический вложенный класс (= внутренний класс) означает, что внутренний класс неявно имеет ссылку на его родительский класс.

Именно поэтому для вложенного класса вы можете различать статические и нестатические значения. Это не имеет смысла для внешних классов.

Вот пример, чтобы понять разницу между статическим/нестатическим вложенным классом. Вы должны понять, почему это не имеет смысла во внешнем классе.

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(); 
    } 
    } 

} 
+1

вы можете уточнить? это ново для меня –

+0

Как вы описали понятие, оно в любом случае не имеет отношения к статическому классу на других языках, таких как C#, которые не могут быть созданы. – arjacsoh

+0

метод интерфейса является неявным публичным и абстрактным, но даже если мы объявим их публичными и абстрактными, он действителен. Тогда почему неверно объявлять внешний класс как статический, если он неявно статичен? Я не уверен, что следую этому ответу. –