为什么List不是简单地定义为抽象类而不是接口?

时间:2012-08-08 05:46:19

标签: java collections interface

我们有像

这样的东西
List lst = new LinkedList();

表明List是某种类。那么,为什么称它为接口?我们可以简单地将其称为实现Collection的抽象类。

3 个答案:

答案 0 :(得分:8)

接口和抽象类用于不同的目的。请参阅this question

List定义了我们希望列表类型对象具有的一组行为,而不是数据结构层次结构的基础。它不需要指定任何共享行为或类似的东西。它只是简单地说“所有想要称之为List的东西应该能够做这些事情”

答案 1 :(得分:0)

如果某个类已经在扩展另一个类,则无法在您的情况下扩展List。

基本上你必须理解difference between abstract class and interface

或者您可以阅读Effective Java中的第18项以便更好地理解。

答案 2 :(得分:0)

列出lst = new LinkedList();

此处列表是一种类型的集合,其属性与其他集合类型不同。 LinkedList是使用自己的数据结构作为LinkedList实现这些List属性。 ArrayList是另一种以自己的方式实现相同属性的数据结构。

收集是100%抽象。不同类型的集合具有不同的属性。 例如 列表是A 集合,其属性为允许复制。订单很重要。等等 设置是A 集合,其属性为不允许复制。订单可能不重要等

因为在不同的Collection类型中不需要通用的实现逻辑,所以不需要创建Abstract Class。

另外 List lst = new LinkedList(); 提供运行时多态性的一些好处。 您可以使用一些代码将参数作为List,例如进程(List lst)。 这里可以通过传递LinkedList或ArrayList等来使用相同的代码。 让我不详细说明。

浏览Oleksi指定的Interface和Abstract Class之间的区别。 此外,我想简化一些事情。 OOP中的主要概念是抽象,这是概括的概念。人是动物。动物是生活的东西。现在Living Thing是最高级别的抽象。 这里指出的是,在接口抽象的情况下是100%。在抽象类抽象的情况下,抽象可以在0到100%之间变化。

一般情况下,默认情况下需要提供某些功能时使用抽象类,其余依赖于将扩展它的类。例如 假设Animal是抽象类。每个动物都有共同的东西说creatEnergy()有常见的东西,如食物成蛋白质,脂肪等,这是常见的。所以这种实施对所有动物都是一样的。 但是其他一些东西,比如move()可能会因Man,Bird,Fish等动物而异。因此,不同的动物可能以不同方式实施。因此,抽象在0到100%之间变化。

再次在Java类中,只能扩展一个类,但实现不同的接口。 因此,接口为类提供了一种在不同时间由接口提供不同行为的方法。

希望这个解释能够清除你的怀疑。如果需要更多解释,请告诉我。

相关问题