Одна из определяющих характеристик структуры коллекций Java состоит в том, что она представляет собой систему типа на основе интерфейса. API в основном определяется интерфейсами, которые могут распространять другие интерфейсы. Базовый интерфейс: Collection
.
Таким образом, большинство реализаций коллекции (например, ArrayList
, HashSet
и т. Д.) Также назначаются переменным или параметрам типа Collection
). Это обеспечивает большую выразительность для Рамочной основы.
Большинство реализаций Framework Java Collection имеют конструктор, который принимает параметр типа Collection
. Это называется «конструктором преобразования», поскольку он позволяет передавать любую коллекцию в структуре, тип которой расширяет интерфейс Collection
(и большинство из них) и получает эту коллекцию, представленную как коллекцию вновь созданного типа.
Другими словами:
List<String> list1 = Arrays.asList(new String[] { "one", "two", "three" });
HashSet<String> set1 = new HashSet<>(list1);
Переменная set1
будет в конечном итоге, содержащий ссылку на HashSet
например, содержащей все объекты, которые также в List
например list1
. Конструктор преобразования, по сути, преобразовал представление ваших данных из списка в HashSet.
По возможности, как правило, лучше всего использовать интерфейс объекта как его тип, а не его тип реализации. Это дает вам большую гибкость. Поэтому «List myList = ...» предпочтительнее «ArrayList myList = ...».
http://stackoverflow.com/questions/383947/what-does-it-mean-to-program-to-an-interface – Reimeus
Это не подкласс, это реализация интерфейса. –