Какой смысл объявлять интерфейс абстрактным? То же самое для метода интерфейса. Есть ли смысл?
например.
public abstract interface Presenter {
public abstract void go(final HasWidgets container);
}
Какой смысл объявлять интерфейс абстрактным? То же самое для метода интерфейса. Есть ли смысл?
например.
public abstract interface Presenter {
public abstract void go(final HasWidgets container);
}
Где вы столкнулись с куском кода, который вы опубликовали, с любой старой базой java-кода?
Это то, что JLS должно сказать:
9.1.1.1 аннотация Интерфейсы:
Каждый интерфейс неявно абстрактен. Этот модификатор устарел и не должен
использовать в новых программах.
9.4 Абстрактные декларации методов:
Для совместимости со старыми версиями платформы Java разрешено, но
обескураживают, в качестве стиля, избыточно указать абстрактный модификатор
для методов, объявленных в интерфейсах.
Интерфейсы и методы интерфейса неявно abstract
, даже если они не объявлены как таковые. Поэтому нет необходимости явно указывать его.
Не имеет значения - интерфейсы и методы интерфейса всегда абстрактны, но вам не нужно добавлять модификатор (и методы интерфейса всегда общедоступны, поэтому вам также не нужен публичный модификатор).
Из JLS:
9.1.1.1 аннотация Интерфейсы
Каждый интерфейс неявно абстрактный. Эта модификатор устарел и не должен быть используется в новых программах.
Как правило, вы не объявляете интерфейс или его методы абстрактными. Они неявно.
Методы также являются общедоступными, поэтому вы также можете пропустить это.: -)
посмотрите этот пост
Интерфейспредставляет собой% 100 абстрактного класса.
ключевое слово abstract здесь избыточно
Поведение интерфейса по умолчанию в основном эквивалентно тому, что у вас есть в вашем примере. Определение его как абстрактного просто избыточно.
Я думаю, что просто многословность, ясность и последовательность с синтаксисом и семантикой класса...
Вам не обязательно, но, возможно, это может помочь, если какой-либо читатель вашего кода отвлечен или не очень разбирается в Java.
Нет смысла объявлять интерфейс абстрактным. Так как методы в интерфейсе являются абстрактными. Еще одна вещь абстрактный класс может иметь как конкретные, так и абстрактные методы, но в интерфейсе должны быть только абстрактные методы.
Абстрактный модификатор для метода интерфейса всегда избыточен, а также публичный модификатор.
Абстрактный модификатор на самом интерфейсе может быть избыточным по строгой технической причине, так как интерфейс никогда не может быть создан с использованием нового оператора, и интерфейс всегда будет абстрактным, если его спросить через отражение.
Тем не менее, может существовать семантическая причина для объявления абстрактного интерфейса (который также поддерживается различными инструментами UML): Возможно, вам захочется выразить, что интерфейс явно объявлен абстрактным в том смысле, что не абстрактный класс может не реализовывать интерфейс напрямую, а только через под-интерфейс. Так, например, вы можете считать интерфейс Node семантически абстрактным, а под-интерфейсы Папка и файл, которые расширяют Node, семантически не абстрактны. У вас никогда не будет экземпляра, который является только Node - это будет либо папка, либо файл.
Кроме того, существуют рамки, которые позволяют "создавать экземпляры" интерфейсов (технически через динамические прокси). Там некоторый интерфейс (например, предопределенный базовый интерфейс) не разрешается предоставлять в качестве аргумента. Для целей документации в исходном коде может иметь смысл использовать абстрактный модификатор для выражения такой информации.
"Зачем объявлять интерфейс абстрактным?" - у меня был тот же вопрос и я подумал, что абстрактное является излишним. Но мне пришлось переосмыслить, когда я увидел интерфейс 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();
}