Интерфейсы, часть 1: поля и методы
Интерфейс — базовый механизм джавы для поддержки ООП, а также главный герой этой недели🦸🏼♂️
🔸 Какие методы можно добавить в интерфейс в разных версиях java?
Java 7 — только нестатические public методы:
Java 8 — плюс 2 возможности:
▪️Методы по умолчанию с заданной реализацией:
▪️ Статические методы с реализацией:
В интерфейсе определяется необходимый минимум методов. Например, в Collection это методы add(), remove() и пара других. Чем меньше методов, тем больше свободы действий у конкретных классов.
Эти базовые методы комбинируются между собой в другие полезные методы:
▪️Поиск элемента,
▪️Поиск минимального элемента
▪️Скопировать коллекцию
Каждый из этих методов — всего лишь комбинация базовых, которая не зависит от конкретного класса. Чтобы не копировать код в каждый класс, удобно вынести его в статический метод в интерфейсе:
Java 9 — добавились private и private static методы с реализацией:
Зачем они нужны?
Код внутри дефолтных и статических методов может дублироваться. Чтобы улучшить читаемость, можно вынести общие части в приватный метод.
🔸 С методами разобрались, а какие поля можно добавлять в интерфейс?
Только константы с модификаторами
🔸 Правильный ответ на вопрос перед постом
Ошибку компиляции в последней версии java вызовут:
Интерфейс — базовый механизм джавы для поддержки ООП, а также главный герой этой недели🦸🏼♂️
🔸 Какие методы можно добавить в интерфейс в разных версиях java?
Java 7 — только нестатические public методы:
interface Интерфейс {Классы реализуют эти методы под угрозой ошибки компиляции.
public void метод();
}
Java 8 — плюс 2 возможности:
▪️Методы по умолчанию с заданной реализацией:
default void метод() {…};Конкретный класс переопределяет его при необходимости. Дефолтные методы уместны в трёх случаях, об этом будет статья в среду.
▪️ Статические методы с реализацией:
static void метод() {…};Статические методы не наследуются и не переопределяются. Вызвать такой метод можно только через имя интерфейса:
Интерфейс.метод()Зачем он нужен?
В интерфейсе определяется необходимый минимум методов. Например, в Collection это методы add(), remove() и пара других. Чем меньше методов, тем больше свободы действий у конкретных классов.
Эти базовые методы комбинируются между собой в другие полезные методы:
▪️Поиск элемента,
▪️Поиск минимального элемента
▪️Скопировать коллекцию
Каждый из этих методов — всего лишь комбинация базовых, которая не зависит от конкретного класса. Чтобы не копировать код в каждый класс, удобно вынести его в статический метод в интерфейсе:
static E copy() {…};До java 8 статические методы часто объединяли в утилитный класс с похожим именем. Например, методы binarySearch, copy, min реализованы в классе Collections.
Java 9 — добавились private и private static методы с реализацией:
private void m() {…};Эти методы недоступны для классов, реализующих интерфейс.
private static void m() {…};
Зачем они нужны?
Код внутри дефолтных и статических методов может дублироваться. Чтобы улучшить читаемость, можно вынести общие части в приватный метод.
🔸 С методами разобрались, а какие поля можно добавлять в интерфейс?
Только константы с модификаторами
public static
. Из-за того, что других вариантов нет, в Intellij IDEA public
и static
подсвечиваются как избыточные и вместоpublic static int NUM = 1;допустима запись:
int NUM = 1;Такие поля компилируются в статические!
🔸 Правильный ответ на вопрос перед постом
Ошибку компиляции в последней версии java вызовут:
default int get();У приватных, статических и default методов в интерфейсах должна быть реализация.
private int get();
public static int get();