Из чего состоит интерфейс в контексте ООП?

«Из чего состоит интерфейс в контексте ООП?» — вопрос из категории ООП, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В объектно-ориентированном программировании интерфейс — это формальный контракт, который определяет набор методов, которые класс обязан реализовать. Он содержит только сигнатуры методов (название, параметры, возвращаемый тип) без их реализации (абстрактные методы).

Основные компоненты интерфейса:

  • Абстрактные методы: Основная часть контракта.
  • Константы (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 или кастомного раннера, что упрощает замену одного фреймворка на другой.