У меня есть структура классов, где я хотел бы, чтобы некоторые методы в базовом классе были доступны из классов, производных непосредственно от базового класса, но не из классов, производных от производных классов. В соответствии со спецификацией языка Java можно переопределить спецификации доступа для унаследованных методов, чтобы сделать их более открытыми, но не более частными. Например, это суть того, что мне нужно сделать, но это незаконно:
// Defines myMethod
public class Base {
protected void myMethod() {}
}
// Uses myMethod and then hides it.
public class DerivedOne extends Base {
@Override
private void myMethod();
}
// can't access myMethod.
public class DerivedTwo extends DerivedOne {
}
Есть ли способ сделать это?
Отредактировано, чтобы объяснить, почему я хотел бы сделать это:
В этом случае структура класса является структурой обработки данных и импорта. Он считывает и анализирует текстовые файлы, полные табличных данных, а затем сохраняет их в базе данных.
Базовый класс - это базовый класс таблиц, управляющий частью обработки базы данных. В нем содержится достаточное количество функциональности, которая является общей для всех типов таблиц - поскольку, попав в базу данных, они становятся единообразными.
Средний класс зависит от типа таблицы в анализируемом файле и имеет логику анализа и импорта таблицы. Ему нужен доступ к некоторым функциям доступа к базе данных базового класса.
Класс верхнего уровня специфичен для таблицы и выполняет только инициализацию макета таблицы так, как его могут понять родительские классы. Кроме того, пользователям базового класса не нужно видеть или получать доступ к конкретным функциям базы данных, которые выполняет средний класс. По сути, я хочу раскрыть эти функции только на один уровень выше базового класса и никого больше.
Я спрашиваю, потому что, хотя код, который я выложил в качестве примера, является недопустимым, могут быть и другие способы достижения той же цели. Я спрашиваю, если есть.
Возможно, сокрытие - это неправильный способ выразить это - мне действительно нужно показать некоторые функциональные возможности, которые должны быть частными для базового класса, на один уровень выше в иерархии. Сокрытие достигло бы этого - но я вижу, как скрытие было бы проблемой. Есть ли другой способ сделать это?