#java #коллекции
Почему в Java, кроме интерфейсов коллекций, есть соответствующие им абстрактные классы. Например, есть интерфейс Collection. и абстрактный класс AbstractCollection, List и AbstractList. Почему недостаточно только интерфейса?
Ответы
Ответ 1
Абстрактные классы - это helper-классы, предоставляющие базовую умолчательную "скелетную" реализацию функциональности соответствующих интерфейсов. Например, класс AbstractCollection предоставляет пользователю "скелетную" реализацию интерфейса Collection. Для того, чтобы реализовать свою коллекцию, вам нужно просто унаследоваться от AbstractCollection и предоставить свои собственные реализации тех методов, которые специфичны для вашей коллекции. А те, которые неспецифичны - просто унаследуются в готовом виде из AbstractCollection. Таким образом вам не нужно будет писать ворох "скучных" методов с тривиальной или рутинной реализацией. В то же время вы не обязаны пользоваться AbstractCollection. Вы имеете полное право, если вам так захочется, реализовать интерфейс Collectionсвоими силами, с нуля, не пользуясь услугами AbstractCollection. Точно также проведено разделение между List и AbstractList.Ответ 2
Проще скажем так: интерфейс : это характеристика класса, при чём характеристик может быть много абстрактный класс-предок : это ядро класса, зачастую стратегия поведения То есть вещи весьма разные - не удивительно, что для одного и того же класса присутствуют обе концепции.Ответ 3
Interface - показывает, что объет класса обладает каким то поведением, но без указание того, как он это делает Abstract class - идея та же самая, но в нем, как правило, уже присутствует частичная реализация. Это позволяет избавиться от дублирования кода в классах потомках. С abstract class широко используется паттерн проектирования template method. Приведу пример из того же java.util.AbstractList. Там есть метод addAll(int index, Collection c) имеющий конкретную реализацию, в нем вызывается add(int index, E element), который в свою очередь уже является абстрактным.
Комментариев нет:
Отправить комментарий