Можно ли объявить приватные (private) переменные в интерфейсе Java?

«Можно ли объявить приватные (private) переменные в интерфейсе Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет. В интерфейсах Java нельзя объявлять приватные переменные (поля экземпляра).

Что можно объявлять в интерфейсе?

  1. Константы: Любое поле, объявленное в интерфейсе, неявно является public, static и final. Это константы.
    interface Constants {
        String DEFAULT_NAME = "Unknown"; // public static final String DEFAULT_NAME
        int MAX_SIZE = 100; // public static final int MAX_SIZE
    }
  2. Приватные методы (с Java 9): Начиная с Java 9, в интерфейсах можно объявлять private методы, обычно для выделения общей логики из default-методов.
    interface Logger {
        default void logInfo(String message) {
            log("INFO", message);
        }
        default void logError(String message) {
            log("ERROR", message);
        }
        // Приватный метод-помощник
        private void log(String level, String message) {
            System.out.println("[" + level + "] " + message);
        }
    }

Альтернатива для приватных полей: Если нужны поля с состоянием и инкапсуляцией, следует использовать абстрактный класс.

abstract class AbstractDevice {
    private String serialNumber; // Приватное поле

    public AbstractDevice(String serialNumber) {
        this.serialNumber = serialNumber;
    }

    public String getSerialNumber() {
        return serialNumber;
    }
    // ... абстрактные методы
}