У меня есть структура класса, где я хотел бы, чтобы некоторые методы в базовом классе были доступны из классов, полученных непосредственно из базового класса, но не классов, производных от производных классов. Согласно спецификации языка 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 {
}
Есть ли способ сделать это?
Отредактировано, чтобы объяснить, почему я хотел бы сделать это:
В этом случае структура класса представляет собой структуру обработки и импорта данных. Он считывает и анализирует текстовые файлы, полные табличных данных, а затем сохраняет их в базе данных.
Базовый класс - это класс базовой таблицы, управляющий частью обработки базы данных. В нем содержится множество функциональных возможностей, которые являются общими для всех типов таблиц - как только они находятся в базе данных, они становятся однородными.
Средний класс относится к типу таблицы в анализируемом файле и имеет логику синтаксического анализа и импорта. Он нуждается в доступе к некоторым функциям доступа к базе данных базового класса.
Класс верхнего уровня специфичен для таблицы и не делает ничего, кроме как инициализировать макет таблицы, как это могут понять родительские классы. Также пользователям базового класса не нужно видеть или получать доступ к конкретным функциям базы данных, которые выполняет средний класс. По сути, я хочу раскрыть эти функции только на один уровень выше базового класса и никого больше.
Я спрашиваю, потому что, хотя код, который я опубликовал в качестве примера, является незаконным, могут быть некоторые другие средства для достижения того же конца. Я спрашиваю, есть ли.
Возможно, скрытие - это неправильный способ выразить это: мне действительно нужно сделать некоторые функции, которые должны быть частными для базового класса до уровня первого уровня в иерархии. Скрытие это выполнит, но я вижу, как скрыть проблему. Есть ли другой способ сделать это?