例如,我经常看到这样的事情:
Queue<String> q = new LinkedList<String>();
我完全理解这一点,通过将其声明为Queue类型,任何实现Queue接口的类都可用于实例化对象。
困扰我的是我常常看到像
这样的东西q.size()
获取队列的大小。
这编译并且工作正常,但对我来说,做这样的事情会破坏“接口”的概念,因为size()是LinkedList类中的一个方法。
基本上我们需要知道用于实例化队列对象的类。如果我们后来决定使用不同的类来实例化这个队列对象,那么我们可能会遇到麻烦
e.g。如果我们决定 NOT 使用LinkedList类并决定使用其他类来实例化队列对象,我们需要确保新类也有方法size(),否则我们需要改变它。
注意:我使用size()方法只是作为示例。潜在地,可以在队列对象上调用LinkedList具有的任何方法吗?如果我们后来决定使用其他类来实例化队列对象,我们会怎么做?我们需要确保这个新类也有相同的方法,对吧?这似乎是打败界面的目的。 如果我们将变量声明为接口类型,我们应该只使用特定于该接口的方法。
我在这里错过了一些观点吗?
答案 0 :(得分:3)
任何Queue
实现都将使用size()
方法,因为size()
是Collection
接口的一种方法,Queue
接口扩展。因此,size()
间接属于Queue
接口。