Ответ
Нет. Методы абстрактного класса могут иметь любые модификаторы доступа: public, protected или private (а также доступ по умолчанию, package-private).
Правила:
- Абстрактные методы (без реализации) не могут быть
privateилиfinal, так как их цель — быть переопределёнными в подклассах. Они могут бытьpublic,protectedили package-private. - Конкретные методы (с реализацией) могут иметь любой модификатор доступа, включая
private.
Почему это важно: Абстрактный класс часто содержит общую логику (шаблонный метод), где часть функционала скрыта (private), часть доступна наследникам (protected), а часть — внешнему коду (public).
Пример:
abstract class DataProcessor {
// Публичный абстрактный метод - контракт для клиента
public abstract String processData(String input);
// Protected метод - вспомогательная логика для наследников
protected String sanitizeInput(String input) {
return input.trim();
}
// Private метод - внутренняя реализация, скрытая от всех
private void logProcessing() {
System.out.println("Processing started...");
}
// Публичный шаблонный метод, использующий все вышеперечисленные
public final String execute(String input) {
logProcessing();
String cleanInput = sanitizeInput(input);
return processData(cleanInput);
}
}