Разницы нет, переменная cow
используется только для добавления ее к ArrayList<Animal>
.
. Может быть разница в зависимости от конкретного случая использования, поскольку переменная Cow
может иметь дополнительныеметоды, которых нет в Animal
, но семантически они будут вести себя эквивалентно.
Единственное отличие состоит в том, что вы можете вызывать для переменной cow
.
В общем, этоВсегда лучше использовать наименее конкретный тип, который вы можете, чтобы быть уверенным, что вы не используете какую-либо конкретную функцию, которую вы не хотели бы использовать. Этот же принцип применим к animals
переменным, лучше объявить:
List<Animal> animals = new ArrayList<>();