2010-03-21 3 views

ответ

2

Во-первых, потому что это не имеет смысла. Как статический интерфейс будет отличаться от нестатического интерфейса?

Во-вторых, они могут:

public class SomeClass { 
    static interface StaticInterface { 
    } 
} 
6

Think интерфейса, как план. это ничего конкретного. Просто схема того, что класс должен реализовать, если придерживается (наследует) интерфейс.

Java (iirc) не имеет понятия «статические» классы как такового, то есть «Static» не является ключевым словом в объявлении класса, как в C#. Вместо этого статический класс - это класс, состоящий только из статических элементов и методов.

Как вы знаете, статические элементы и статические методы относятся к классу, а не к экземпляру.

Поскольку интерфейс - это просто проект, а не конкретный, «статический» интерфейс не имеет смысла.

Остерегайтесь этого внутреннего класса.

В объявлении класса вы можете определить интерфейс, который является статическим, но я предполагаю, что он ничего не делает.

+0

+1 Хорошее объяснение. Но что вы подразумеваете под «Я предполагаю, что это ничего не делает»? – helpermethod

2

Если вы имеете в виду сам интерфейс: Потому что на самом деле не что-нибудь полезное вы могли бы означать с static interface

Если вы имеете в виду интерфейсу методы: Поскольку в Java, статические методы являются собственностью класса и не может переопределяться или вызываться полиморфно.

0

Actualy, я вижу смысл в интерфейсах, которые не могут быть реализованы (особенно до перечислений были введены в Java 5):

public static (or better final?) interface Colors { 
    public final int RED = 1; 
    public final int GREEN = 2; 
    ... 
} 

Если кто-то знает, почему эти вещи не должно быть сделано таким образом (предположим мы все еще в java_1.4), пожалуйста, оставляйте комментарии.

+1

Я думаю, что интерфейсы больше касаются поведения, а не данных. Если нет перечислений, я бы переместил эти (статические) данные в класс. – spa

+0

Это «Постоянный интерфейс против шаблона». – whiskeysierra

+0

Это на самом деле называется постоянным интерфейсом antipattern (см. Википедию для справки). Альтернативой является использование конкретного класса (частный конструктор). – helpermethod

Смежные вопросы