Что такое статический интерфейс в java?
Я читал интерфейс Map.Entry, когда заметил, что это "статический" интерфейс. Я не совсем понял, что такое статический интерфейс и как он отличается от обычного интерфейса?
public static interface Map.Entry<K,V>
Это определение интерфейса. Документы здесь: http://docs.oracle.com/javase/6/docs/api/java/util/Map.Entry.html
Ответы
Ответ 1
Мне интересно, когда это не внутренний интерфейс.
Модификатор static
разрешен только для вложенных классов или интерфейсов. В вашем примере Entry
вложен внутри интерфейса Map
.
Для интерфейсов модификатор static
фактически является необязательным. Различие не имеет смысла для интерфейсов, поскольку они не содержат кода, который мог бы получить доступ к внешнему this
.
Ответ 2
Статический внутренний интерфейс и внутренний интерфейс одинаковы, все правила доступа такие же, как и с внутренним статическим классом. Таким образом, внутренний интерфейс может быть доступен только в том случае, если у вас есть доступ к его родительскому классу/интерфейсу. В случае ниже у вас будет доступ к интерфейсу B только из пакета интерфейса A, поскольку A имеет модификатор доступа по умолчанию. BTW: интерфейс B может быть статическим или нет.
interface A {
void testA();
public interface B {
void testB();
}
}