Что такое интерфейс
Интерфейс - это, по сути, контракт, в котором говорится: «Это методы, которые должен реализовывать любой класс, реализующий этот интерфейс».
Объявление переменной или поля с интерфейсом. Тип в основном говорит: «Мне все равно, какой класс специфицируется c, который назначается здесь, при условии, что он следует контракту.»
LinkedList
следует контракту, установленному Queue
путем реализации всех необходимых методов.
Поэтому мы можем присвоить ссылку на объект типа LinkedList
переменной типа Queue
.
«Не может быть экземпляра интерфейса»
Разработчики часто узнают, что «вы не можете создать экземпляр интерфейса», что является правильным, но слегка вводящим в заблуждение.
Вы можете иметь объект, который является экземпляром типа интерфейса, имея экземпляр конкретного класса, который реализует этот интерфейс.
Так что пока вы можете не выполнить new Queue<String>()
(так как Вы не можете создать экземпляр интерфейса) выражение new LinkedList<String>()
фактически возвращает Queue<String>
(потому что LinkedList<String>
is-a Queue<String>
, так же, как is-a Object
).