Зачем объявлять интерфейс абстрактным?

Какой смысл объявлять интерфейс абстрактным? То же самое для метода интерфейса. Есть ли смысл?

например.

public abstract interface Presenter {
 public abstract void go(final HasWidgets container);
}

Ответ 1

Где вы столкнулись с куском кода, который вы опубликовали, с любой старой базой java-кода?
Это то, что JLS должно сказать:

9.1.1.1 аннотация Интерфейсы:
Каждый интерфейс неявно абстрактен. Этот модификатор устарел и не должен использовать в новых программах.

9.4 Абстрактные декларации методов:
Для совместимости со старыми версиями платформы Java разрешено, но обескураживают, в качестве стиля, избыточно указать абстрактный модификатор для методов, объявленных в интерфейсах.

Ответ 2

Интерфейсы и методы интерфейса неявно abstract, даже если они не объявлены как таковые. Поэтому нет необходимости явно указывать его.

Ответ 3

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

Из JLS:

9.1.1.1 аннотация Интерфейсы

Каждый интерфейс неявно абстрактный. Эта модификатор устарел и не должен быть используется в новых программах.

Ответ 4

Как правило, вы не объявляете интерфейс или его методы абстрактными. Они неявно.

Методы также являются общедоступными, поэтому вы также можете пропустить это.: -)

Ответ 6

Поведение интерфейса по умолчанию в основном эквивалентно тому, что у вас есть в вашем примере. Определение его как абстрактного просто избыточно.

Ответ 7

Я думаю, что просто многословность, ясность и последовательность с синтаксисом и семантикой класса...

Вам не обязательно, но, возможно, это может помочь, если какой-либо читатель вашего кода отвлечен или не очень разбирается в Java.

Ответ 8

Нет смысла объявлять интерфейс абстрактным. Так как методы в интерфейсе являются абстрактными. Еще одна вещь абстрактный класс может иметь как конкретные, так и абстрактные методы, но в интерфейсе должны быть только абстрактные методы.

Ответ 9

Абстрактный модификатор для метода интерфейса всегда избыточен, а также публичный модификатор.

Абстрактный модификатор на самом интерфейсе может быть избыточным по строгой технической причине, так как интерфейс никогда не может быть создан с использованием нового оператора, и интерфейс всегда будет абстрактным, если его спросить через отражение.

Тем не менее, может существовать семантическая причина для объявления абстрактного интерфейса (который также поддерживается различными инструментами UML): Возможно, вам захочется выразить, что интерфейс явно объявлен абстрактным в том смысле, что не абстрактный класс может не реализовывать интерфейс напрямую, а только через под-интерфейс. Так, например, вы можете считать интерфейс Node семантически абстрактным, а под-интерфейсы Папка и файл, которые расширяют Node, семантически не абстрактны. У вас никогда не будет экземпляра, который является только Node - это будет либо папка, либо файл.

Кроме того, существуют рамки, которые позволяют "создавать экземпляры" интерфейсов (технически через динамические прокси). Там некоторый интерфейс (например, предопределенный базовый интерфейс) не разрешается предоставлять в качестве аргумента. Для целей документации в исходном коде может иметь смысл использовать абстрактный модификатор для выражения такой информации.

Ответ 10

"Зачем объявлять интерфейс абстрактным?" - у меня был тот же вопрос и я подумал, что абстрактное является излишним. Но мне пришлось переосмыслить, когда я увидел интерфейс Map в java 1.8.Может быть, это должно быть изменено в java

//  (version 1.8 : 52.0, no super bit)
// Signature: <K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/lang/Object;
public abstract interface java.util.Map {

  // Method descriptor #1 ()I
  public abstract int size();
}