当我遇到这个时,我正在阅读this PowerPoint presentation:
当您通过其中一个引用调用方法时,将根据所引用接口的实际实例调用正确的版本。这是接口的关键特性之一。要在运行时动态查找要执行的方法,允许在调用方法的代码之后创建类。
任何人都能解释一下这个概念吗?我提到了一些网站和书籍,我仍然不清楚这个概念是如何运作的。从上面的行可知,它调用了正确的方法版本。它是如何工作的,何时应该将对象转换为接口类型。
答案 0 :(得分:4)
让我们使用List
界面举例说明。其中两个实现是ArrayList
和LinkedList
。第一个是快速检索随机元素(例如使用get(6)
方法的第6个)但在添加和删除元素方面很慢。第二个是相反的。快速添加和删除但访问随机元素的速度很慢。
现在假设您有一个类,其中包含检索汽车经销商信息的方法。一种方法检索所有可用汽车制造商的列表,而另一种方法检索经销商具有的所有汽车。在第一种情况下,您可能希望使用ArrayList
,因为您不希望制造商列表更改那么多,而在第二种情况下,您需要LinkedList
,因为您希望销售然后购买大量汽车,从而做出很多改变。
然而,使用这些方法的人并不关心他是处理ArrayList
还是LinkedList
。他想做的就是使用get(x)
和add(Car)
或remove(Car)
这些都是List
界面的方法。因此,您的方法应该都有List
作为返回类型,而他们将决定他们将提供的实现,因为它对于一个人打电话给他们。
这也为您提供了以后更改第二种方法的优势,例如,如果您决定将LinkedList
提供给ArrayList
你需要快速检索而不是快速添加和删除。如果该方法明确返回LinkedList
,则必须将所有调用它的位置更改为新类型。但如果它只返回界面那么就不需要外部更改了!