У меня есть путаница в разных способах создания объектов, которые я видел в java-документах и других книгах по программированию. Напр.Объектно-ориентированный дизайн: что лучше?
Если предположить, что существует base class
и derived class
1- У меня есть переменная типа Base
которая относится к объекту типа Derived
List<String> list = new ArrayList<String>();
2- У меня есть переменная типа Derived
которой относится к объекту типа Derived
ArrayList<String> arrList = new ArrayList<String>();
Мой вопрос заключается в том, что должно быть моим мышлением при выборе между 1 и 2? Использовать ли вообще Polymorphism
базовые сценарии?
Есть ли better practice
при выборе между 1 и 2, о которых я не знаю, или это просто personal decision
?
EDIT:
К сожалению, список представляет собой интерфейс. Другой вопрос: Будет ли изменено мое решение, если я использую параметр типа?
ArrayList<T> list = new ArrayList<T>();
Update Ответ: Это на самом деле называется "Programming to the interface"
. Спасибо Code-Guru. Именно то, что я искал, объясняется в очень простых условиях в одном из ответов на этот вопрос - What does it mean to "program to an interface"?
Вариант 1 обычно предпочтительнее (игнорируя разницу между абстрактным базовым классом и интерфейсом). В ООП мы называем это «программирование интерфейсом». –
Извините. См. Другой вопрос, отредактированный. – Prince
Я по-прежнему предлагаю вам объявить 'list' как' List', а не 'ArrayList '. Изменение параметра типа не приводит к существенному изменению исходного вопроса. –