interface
Объявляет интерфейс — набор методов, которые обязуется реализовать класс.
Доступно с: Java 1.0
Синтаксис
interface Name { Type method(); default Type other() { … } }Примеры
Интерфейс и две реализации:
interface Shape {
double area();
}
class Circle implements Shape {
double r;
Circle(double r) { this.r = r; }
public double area() { return Math.PI * r * r; }
}
class Square implements Shape {
double side;
Square(double side) { this.side = side; }
public double area() { return side * side; }
}
void main() {
List<Shape> shapes = List.of(new Circle(1), new Square(2));
for (Shape s : shapes) {
IO.println(Math.round(s.area() * 100) / 100.0);
}
}Результат:
3.14
4.0Метод default с готовой реализацией и статический метод:
interface Greeter {
String name();
default String greet() {
return "Hello, " + name() + "!";
}
static Greeter of(String name) {
return () -> name;
}
}
void main() {
IO.println(Greeter.of("Anna").greet());
}Результат:
Hello, Anna!Примечания
Методы интерфейса по умолчанию public и abstract, поэтому в классе-реализации они объявляются с public. Класс может реализовать много интерфейсов, но унаследоваться только от одного класса. Интерфейс с одним абстрактным методом — функциональный: его можно реализовать лямбдой, как Greeter.of() выше.
См. также
- implements — Указывает интерфейсы, которые реализует класс.
- abstract — Помечает класс, объект которого создать нельзя, и метод без тела, который реализуют наследники.
- sealed / permits — Ограничивает список классов, которым разрешено наследоваться от класса или реализовывать интерфейс.
В учебнике
- Интерфейсы — Интерфейсы в Java: implements, несколько интерфейсов у одного класса, интерфейс как тип и методы по умолчанию.