Ответ
В объектно-ориентированном программировании интерфейс — это формальный контракт, который определяет набор методов, которые класс обязан реализовать. Он содержит только сигнатуры методов (название, параметры, возвращаемый тип) без их реализации (абстрактные методы).
Основные компоненты интерфейса:
- Абстрактные методы: Основная часть контракта.
- Константы (
public static final): Для определения общих значений. - Методы по умолчанию (
defaultв Java): Реализация по умолчанию для обратной совместимости. - Статические методы: Вспомогательные методы, связанные с интерфейсом.
- Приватные методы (Java 9+): Для организации кода внутри
default-методов.
Пример на Java:
// Интерфейс определяет контракт для тестового отчета
interface TestReporter {
// Константа
String REPORT_FORMAT = "JSON";
// Абстрактный метод - обязателен для реализации
void generateReport(TestResult result);
// Метод по умолчанию
default void logStart() {
System.out.println("Report generation started");
}
// Статический метод
static boolean validateFormat(String format) {
return format.equals("JSON") || format.equals("XML");
}
}
// Класс реализует интерфейс
class JsonReporter implements TestReporter {
@Override
public void generateReport(TestResult result) {
// Реализация генерации JSON-отчета
System.out.println("Generating JSON report...");
}
}
Зачем это нужно в тестировании? Интерфейсы позволяют создавать гибкую архитектуру тестовых фреймворков. Например, можно иметь интерфейс TestRunner с методом runTests(), а затем разные реализации для JUnit, TestNG или кастомного раннера, что упрощает замену одного фреймворка на другой.