#java
#java
Вопрос:
Если класс расширяет другой класс, можно ли инициализировать расширенный класс, а не расширять его?
Пример 1:
public class FoodListAdapter extends BaseAdapter{
//rest of the codes in here
}
Пример 2:
public class FoodListAdapter {
private BaseAdapter fAdapter;
//rest of the codes here
}
Может ли Example2 дать результат, аналогичный результату Example1?
Комментарии:
1. Один называется отношением is-a . Другой называется отношением has-a .
Ответ №1:
Обе стратегии хороши. Это зависит от того, чего вы пытаетесь достичь.
Первый пример — наследование, а второй — делегирование.
Оба являются хорошо известными шаблонами проектирования.
Ответ №2:
Пример 1 — наследование.
Примером 2 является агрегация, направленная односторонняя ассоциация, представляющая отношение «Имеет».
Пример 1 более хрупкий, поскольку он напрямую предоставляет пользователям доступ к базовому BaseAdapter
классу. Пример 2 может инкапсулировать и делегировать вызовы BaseAdapter
. Если однажды вы решите удалить BaseAdapter
, пользователи FoodListAdapter
класса никогда не узнают.
Комментарии:
1. Пожалуйста, если example2 возможен, как он будет кодироваться с использованием BaseAdapter?
2. Как вы уже сделали, просто передайте BaseAdapter с помощью конструктора или метода setter .