XXX должен иметь тип java.util.AbstractList , поскольку оба LinkedList и Stack получены из него.
Но это будетне решить вашу проблему, так как метод remove () для каждого класса будет вести себя одинаково.Чтобы получить другое поведение, вам необходимо вызвать разные методы удаления: remove () или pop () .И как метод, эти remove () и pop () оба реализованы на java.util.Linkedlist (см. Queue interface) тамнет необходимости использовать класс java.util.Stack .
Вы можете вызывать различные методы pop () и remove () с оператором if , но это определенно будет ОО анти-патерне.Базовое решение ОО состоит в реализации 3 классов:
- Абстрактный родительский элемент с именем Поиск Класс
- BfsSearch : работает с remove ()в поиске.
- DfsSearch : работает с pop () при поиске.
Таким образом, пользователь этого класса может работать с Выполните поиск , не зная, использует ли он BfsSearch или DfsSearch.
Еще более продвинутый и гибкий подход ОО будет использовать шаблон стратегии , как описано Майком.Но для простых решений, которые не нуждаются в такой гибкости, это может быть излишним.
Кстати, отличная книга по ОО-дизайну, которая объяснит все эти виды выбора и паттерны, - Ларман :
Применение UML и шаблонов: введение в объектно-ориентированный анализ, проектирование и итеративную разработку (3-е издание)