Программирование на Java и OOO в целом позволяет вам определить, как должен использоваться объект (это интерфейс объекта), поэтому только разработчик библиотеки должен беспокоиться о мрачных деталях того, как все на самом деле работает. Вот почему рекомендуется никогда не возвращать сам класс, а только интерфейс. В дополнение к улучшению обслуживания он также позволяет использовать объекты-заглушки или заглушки при тестировании кода для ваших приложений.
В частности, Java позволяет создавать реализацию интерфейса на лету. то есть вы можете сделать что-то вроде
return new List() {
boolean add() {...}
void addAll {...}
...
}
Это, конечно, излишне для сложных интерфейсов, таких как List, но на самом деле очень удобно для небольших интерфейсов.