Почему разработчики коллекций java так решили?
В интерфейсе Collection, есть метод size(). Есть так же интерфейс List, который наследуется от Collection, при этом, зная, что при наследовании интерфейсов, мы знаем что все методы родителя уже грубо говоря, являются частью предка. Т.е. при public interface List extends Collection, метод size() из Collection уже есть и у List, однако, покапавшись в исходниках, я обнаружил что несмотря на то что в Collection есть метод size(), его все равно реализуют в List (в самом интерфейсе пишут этот метод(int size())).
Зачем это сделали разработчики языка, если такой метод уже есть у Collection, и при этом List от него наследуется?
Ответы (2 шт):
На самом деле, метода нет ни у Collection, ни у List - это лишь интерфейсы. List наследуется от Collection, следовательно, для List также требуется данный метод.
В случае если бы были реализации методов, то перегрузка была бы вполне оправдана - как правило List всегда знает свой размер в виде числа, а вот Collection в общем виде не совсем (нечто подобное есть в .NET)
Думаю если смотреть на java docs то можно увидеть разницу читая эти интерфейсы.
/**
* Returns the number of elements in this list. If this list contains
* more than {@code Integer.MAX_VALUE} elements, returns
* {@code Integer.MAX_VALUE}.
*
* @return the number of elements in this list
*/
int size();
и
/**
* Returns the number of elements in this collection. If this collection
* contains more than {@code Integer.MAX_VALUE} elements, returns
* {@code Integer.MAX_VALUE}.
*
* @return the number of elements in this collection
*/
int size();
Причина думаю банальна читая Java Docs для листа не хотелось бы читать слово collection