为什么这在Java中是合法的?Queue<String> waitingQueue = new LinkedList<>()。

问题描述 投票:0回答:1

在一个关于队列的教程中,我看到了以下内容。

Queue<String> waitingQueue = new LinkedList<>();

为什么这句话在Java中是合法的?

我看到 什么叫 "按接口编程"? 但这并不能解释为什么上面的声明是有效的这个基本问题。如果Queue是一个接口,我怎么能把一个对象类型化到它上面?我只能在一个类中实现Queue接口来提供我需要的行为。

我错过了什么?

java syntax
1个回答
3
投票

什么是接口

接口基本上是一个合同,说 "这些是任何实现这个接口的类必须实现的方法"。

用接口类型声明一个变量或字段,基本上是在说 "我不管这个变量或字段是什么 特定 类是被分配到这里的,只要它遵循合同。"

LinkedList 遵循合同规定的 Queue 通过实现所有必要的方法。

因此,我们可以将一个引用分配给类型为 LinkedList 类型的变量。Queue.

"不可能有接口的实例"

开发者经常学习 "你不能实例化一个接口",这是对的,但略有误导。

可以 有一个对象是 一例 通过一个实现该接口的具体类的实例来实现一个接口类型。

所以虽然你不能执行 new Queue<String>() (因为你不能实例化一个接口),表达式为 new LinkedList<String>() 实际上是返回一个 Queue<String> (因为a LinkedList<String> 是一个 Queue<String>同样,它 是一个 Object).

© www.soinside.com 2019 - 2024. All rights reserved.