将实例分配给上层类的实例

时间:2011-01-26 12:42:24

标签: java inheritance interface instance

为什么我们要为一个上层实例分配一个实例?这样做的原因是什么? 对于前者为什么我们在下面使用此代码?

List lst = new LinkedList();

似乎List是LinkedList的上层。为什么我们需要使用上层'实例而不是继承类',LinkedList's,instance。

另外,我还有另外一个问题。

我已经看到一些代码将一个类实例分配给它的接口。为什么我们需要下面的例子呢?我知道,因为我们无法生成接口的实例,所以它允许我们使用接口的实例。但是,使用接口实例有什么意义呢?

Apple a = new Apple();
IFruit b = (IFruit) a; (IFruit is the interface of Apple)

我希望,我已经清楚了。提前谢谢。

4 个答案:

答案 0 :(得分:5)

编程接口(摘要)。

稍后,如果您想要LinkedList而不是ArrayList,您只需要更改一行代码:

List lst = new LinkedList();

答案 1 :(得分:2)

List lst = new LinkedList();

此处List是一个界面,LinkedList是它的实现。

这不是超类子类的情况。

List声明其实现者被迫实现的某些方法。 它会给你encapsulation的优势。

答案 2 :(得分:2)

使用接口(您称之为上层类)来抽象出代码中的一些细节。然后,您可以编写更多通用代码来处理类型为interface的数据。

使用水果示例,如果您有几种不同类型的水果,那么您可以编写一个接受IFruit的通用方法并传入任何类型的水果并知道它将被正确处理。如果你没有界面,那么你必须为你需要处理的每种水果都写一个方法。

答案 3 :(得分:1)

这是对接口的编程,允许您在不影响其余代码的情况下交换实现。这样你就可以关注Liskov Substitution Principle,这是五个SOLID原则中的一个(我目前为止最好的' OOP原则之一),我强烈建议您熟悉这些原则。