在JAVA中将引用变量声明为接口类型有什么好处?

时间:2017-05-31 07:17:22

标签: java interface

当我遇到这个时,我正在阅读this PowerPoint presentation

  

当您通过其中一个引用调用方法时,将根据所引用接口的实际实例调用正确的版本。这是接口的关键特性之一。要在运行时动态查找要执行的方法,允许在调用方法的代码之后创建类。

任何人都能解释一下这个概念吗?我提到了一些网站和书籍,我仍然不清楚这个概念是如何运作的。从上面的行可知,它调用了正确的方法版本。它是如何工作的,何时应该将对象转换为接口类型。

1 个答案:

答案 0 :(得分:4)

让我们使用List界面举例说明。其中两个实现是ArrayListLinkedList。第一个是快速检索随机元素(例如使用get(6)方法的第6个)但在添加和删除元素方面很慢。第二个是相反的。快速添加和删除但访问随机元素的速度很慢。

现在假设您有一个类,其中包含检索汽车经销商信息的方法。一种方法检索所有可用汽车制造商的列表,而另一种方法检索经销商具有的所有汽车。在第一种情况下,您可能希望使用ArrayList,因为您不希望制造商列表更改那么多,而在第二种情况下,您需要LinkedList,因为您希望销售然后购买大量汽车,从而做出很多改变。

然而,使用这些方法的人并不关心他是处理ArrayList还是LinkedList。他想做的就是使用get(x)add(Car)remove(Car)这些都是List界面的方法。因此,您的方法应该都有List作为返回类型,而他们将决定他们将提供的实现,因为它对于一个人打电话给他们。

这也为您提供了以后更改第二种方法的优势,例如,如果您决定将LinkedList提供给ArrayList你需要快速检索而不是快速添加和删除。如果该方法明确返回LinkedList,则必须将所有调用它的位置更改为新类型。但如果它只返回界面那么就不需要外部更改了!