当我遇到这个时,我正在阅读这个 PowerPoint 演示文稿:
当您通过这些引用之一调用方法时,将根据所引用的接口的实际实例调用正确的版本。这是接口的关键特性之一。要执行的方法在运行时动态查找,允许在调用类的代码之后创建类。
谁能解释一下这个概念?我提到了几个网站和书籍,我仍然不清楚这个概念是如何运作的。从上面可以知道它调用了正确版本的方法。它是如何工作的,我应该何时将对象转换为接口类型。
让我们举一个使用List
接口的例子。它的两个实现是ArrayList
和LinkedList
。第一个在检索随机元素方面非常快(例如第 6 个使用get(5)
方法),但在添加和删除元素方面很慢。第二个则相反。添加和删除速度快,但访问随机元素速度慢。
现在让我们假设您有一个具有检索汽车经销商信息的方法的类。一种方法检索所有可用汽车制造商的列表,而另一种方法检索经销商拥有的所有汽车。在第一种情况下,您希望使用 an 是ArrayList
因为您不希望制造商列表发生太大变化,而在第二种情况下,您希望使用 a 是LinkedList
因为您希望出售和购买大量汽车,从而进行很多更改。
但是,使用这些方法的人并不真正关心他处理的是 anArrayList
还是 a LinkedList
。他想要做的就是使用get(x)
和add(Car)
或remove(Car)
哪些是List
接口的所有方法。因此,您的方法都应该具有List
它们的返回类型,并且它们将决定它们将提供什么实现,因为调用它们的人并不重要。
这也为您提供了优势,例如,如果您决定需要快速检索而不是快速添加和删除,则可以在将来将第二种方法从提供 a更改LinkedList
为 an ArrayList
。如果该方法显式返回,LinkedList
您将不得不将调用它的所有位置更改为新类型。但是如果它只是返回接口,那么不需要外部更改!