Пример:
interface Outer {
default String get() {
return "hi";
}
class Inner {
String got() {
return get();
}
}
}
Это дает ошибку
java: нестатический метод get() не может ссылаться на статический контекст.
Внутренний интерфейс/класс всегда статичен; в отличие от внешнего класса, где он не статичен, если не объявлен статическим.
Вот как это происходит сегодня и в предстоящей java 8. Есть ли фундаментальная причина для этой разницы между внешними классами и внешними интерфейсами?
Обновление: После прочтения комментария @Radiodef я изменил внутренний интерфейс как внутренний класс. Внешний класс не может содержать нестатический внутренний интерфейс, поэтому пример сбивает с толку. Внутренний класс действительно то, что я хотел бы в любом случае.
Обновить. Для справки. Это совершенно законно:
class Outer {
String get() {
return "hei";
}
class Inner {
String got() {
return get();
}
}
}