Say создать метод, который делает что-то с ArrayList
:
public int sum(ArrayList<Integer> list){
int sum = 0;
for(Integer x : list){
sum += x;
}
return sum;
}
Это будет работать хорошо сейчас, и кто-нибудь с ArrayList
может назвать это. Но как насчет людей с LinkedList
? Им не повезло!
Но почему я должен их исключать? Моя функция фактически не использует ничего конкретного для ArrayList
- я фактически не уход или необходимо знать какой тип List
функция дается. Так почему бы не сделать это как можно более общим, так что любой, у кого есть List
, может вызвать мою функцию?
public int sum(List<Integer> list){
int sum = 0;
for(Integer x : list){
sum += x;
}
return sum;
}
Точно так же, почему я должен объявить переменную как ArrayList
, если я на самом деле не волнует, какой тип List
это? Что делать, если я хочу изменить эту переменную на LinkedList
? Если я объявлю его как List
, это однострочное изменение. Но если я объявляю его ArrayList
, то мне нужно изменить каждую ссылку на него. Это может стать очень раздражающим в крупных проектах, поэтому обычно лучше держать свои переменные как можно более общие.
https://en.wikipedia.org/wiki/Liskov_substitution_principle – David
Вы можете использовать google, stackoverflow и многое другое, чтобы получить ответ –