为什么我们允许接口在Java中用作类型?

时间:2016-06-02 05:57:44

标签: java interface queue

例如,我经常看到这样的事情:

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

我完全理解这一点,通过将其声明为Queue类型,任何实现Queue接口的类都可用于实例化对象。

困扰我的是我常常看到像

这样的东西

q.size()

获取队列的大小。

这编译并且工作正常,但对我来说,做这样的事情会破坏“接口”的概念,因为size()是LinkedList类中的一个方法。

基本上我们需要知道用于实例化队列对象的类。如果我们后来决定使用不同的类来实例化这个队列对象,那么我们可能会遇到麻烦

e.g。如果我们决定 NOT 使用LinkedList类并决定使用其他类来实例化队列对象,我们需要确保新类也有方法size(),否则我们需要改变它。

注意:我使用size()方法只是作为示例。潜在地,可以在队列对象上调用LinkedList具有的任何方法吗?如果我们后来决定使用其他类来实例化队列对象,我们会怎么做?我们需要确保这个新类也有相同的方法,对吧?这似乎是打败界面的目的。 如果我们将变量声明为接口类型,我们应该只使用特定于该接口的方法。

我在这里错过了一些观点吗?

1 个答案:

答案 0 :(得分:3)

任何Queue实现都将使用size()方法,因为size()Collection接口的一种方法,Queue接口扩展。因此,size()间接属于Queue接口。