Я пишу алгоритм, который расширяет класс ArrayList. Здесь, используя экземпляр класса алгоритма, можно вызывать все методы ArrayList. Как я могу ограничить, что только может вызывать метод, который определен в классе алгоритма, а класс алгоритма может получить доступ ко всем методам ArrayList только через свой метод ?? Спасибо
2 ответа
Не расширяйте ArrayList
. Вместо этого создайте его как частное поле члена. При этом у вас есть полный контроль над списком. например
public class YourList<T> {
private ArrayList<T> list;
public YourList() {
list = new ArrayList<>();
}
// example method
public void add(T t) {
list.add(t);
}
}
Я добавил параметр типа T
, поскольку вы не хотите использовать необработанные типы. Вы бы использовали это так
YourList<String> list = new YourList<>();
list.add("String");
YourList<Integer> otherList = new YourList<>();
list.add(1);
И т.п.
Вам не нужно «заставлять» пользователей вызывать ваш подкласс.
По замыслу Java будет запускать методы, переопределенные только в подклассе, при наличии экземпляра подкласса ArrayList
. Суперкласс, ArrayList
, будет предоставлять API (вы не можете запретить другим классам иметь доступ к открытым методам, объявленным в суперклассе), но все переопределенные методы будут выполняться, как определено в вашем подклассе.
Затем ваш подкласс может выбрать запуск реализации метода в ArrayList
, используя ключевое слово super
, когда это необходимо.
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].