Зачем объявлять интерфейс абстрактным? - PullRequest
49 голосов
/ 25 января 2010

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

например.

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

Ответы [ 10 ]

66 голосов
/ 25 января 2010

Где вы встретили кусок кода, который вы опубликовали, какую-либо старую базу Java-кодов?
Это то, что JLS говорит:

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

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

28 голосов
/ 25 января 2010

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

4 голосов
/ 25 января 2010

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

Из JLS :

9.1.1.1 абстрактные интерфейсы

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

2 голосов
/ 25 января 2010

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

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

1 голос
/ 21 декабря 2017

«Зачем объявлять интерфейс абстрактным?» - я получил тот же вопрос и подумал, что абстрактный является избыточным. Но пришлось переосмыслить, когда я увидел интерфейс карты в 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();
}
1 голос
/ 08 декабря 2010

посмотрите на этот пост

https://stackoverflow.com/questions/4380796/what-is-public-abstract-interface-in-java/4381308#4381308

интерфейс% 100 абстрактный класс.

ключевое слово abstract здесь избыточно

0 голосов
/ 16 февраля 2016

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

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

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

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

0 голосов
/ 25 января 2010

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

0 голосов
/ 25 января 2010

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

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

0 голосов
/ 25 января 2010

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

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