为什么List不仅仅被定义为一个抽象类,而不是一个接口?

15 浏览
0 Comments

为什么List不仅仅被定义为一个抽象类,而不是一个接口?

我们有像这样的代码:\n

List lst = new LinkedList();

\n这显示List是某种类型的类。那么,为什么称其为接口呢?我们可以简单地称其为实现了Collection的抽象类。

0
0 Comments

为什么List不仅仅定义为一个抽象类而不是一个接口?

List lst = new LinkedList();

这里,List是一个具有与其他集合类型不同属性的集合类型。

LinkedList是使用自己的数据结构作为LinkedList实现这些List属性的实现。

ArrayList是另一种数据结构,以自己的方式实现相同的属性。

Collection是100%的抽象。不同类型的集合具有不同的属性。

例如

List是一个具有重复允许,顺序重要等属性的集合。

Set是一个具有不允许重复,顺序可能不重要等属性的集合。

因此,由于不同的集合类型中不需要共同的实现逻辑,因此不需要创建抽象类。

此外

List lst = new LinkedList();

提供了运行时多态性的一些好处。

您可以编写一些以List作为参数的代码,例如process(List lst)。

在这里,可以通过传递LinkedList或ArrayList等来使用相同的代码。

让我不详细介绍这个。

请查阅Oleksi指定的接口和抽象类之间的区别。

此外,我想简化事情。

面向对象编程中的主要概念是抽象,这是一个广义的概念。人是动物。动物是生物。现在生物是最高级别的抽象。

这里要说的是,在接口的情况下,抽象是100%。在抽象类的情况下,抽象可以在0到100%之间变化。

通常,当某些功能需要默认提供,并且其他功能取决于将要扩展的类时,使用抽象类。例如

假设Animal是一个抽象类。每个动物都有一个共同的东西,比如creatEnergy(),它有一些共同的东西,比如将食物转化为蛋白质,脂肪等。因此,这个实现对于所有动物来说是相同的。

但是,像移动()这样的其他事情在人、鸟、鱼等动物中可能有所不同。因此,不同的动物可以以不同的方式实现它。因此,这里的抽象度从0到100%不等。

再次,在Java中,类只能扩展一个类,但可以实现不同的接口。

因此,接口提供了一种使类在不同时间具有由接口提供的不同行为的方法。

希望这个解释解决了你的疑问。如果需要更多解释,请告诉我。

0
0 Comments

为什么List不是一个抽象类而是一个接口?

当一个类已经继承了另一个类时,它就不能再继承List接口了。这是因为Java只支持单继承,一个类只能继承自一个父类。

为了理解为什么List不是一个抽象类而是一个接口,我们需要先理解抽象类和接口的区别。抽象类是可以包含方法实现的类,它可以充当其他类的基类,其他类可以通过继承抽象类来继承它的方法和属性。而接口是一种完全抽象的类,它只包含方法的定义而没有方法的实现,其他类可以通过实现接口来继承它的方法。

在Java中,如果List是一个抽象类而不是一个接口,那么其他类就只能通过继承List来获得List的方法和属性。这将导致一个类只能继承一个父类的限制,无法同时继承其他类。这样会限制了类的设计灵活性和复用性。

因此,将List定义为一个接口而不是一个抽象类,可以让其他类通过实现List接口来继承List的方法,同时仍然可以继承其他类。这样就提供了更大的灵活性和复用性。

总结起来,为了避免Java只支持单继承的限制,List被定义为一个接口而不是一个抽象类。这样可以让其他类通过实现List接口来继承List的方法,同时仍然可以继承其他类。这样就提供了更大的灵活性和复用性。

参考资料:

- [difference between abstract class and interface](https://stackoverflow.com/questions/1474249)

- [Effective Java](https://rads.stackoverflow.com/amzn/click/com/0321356683)(第18项)

0
0 Comments

为什么List不仅仅被定义为一个抽象类,而不是一个接口?这个问题的出现的原因是因为接口和抽象类的用途不同。

在Java中,接口和抽象类都是用来定义一组行为的工具。然而,它们的使用场景有所不同。接口定义了一组方法的契约,任何实现该接口的类都必须实现这些方法。接口更加灵活,可以被多个类同时实现,从而实现多态性。而抽象类则更加适合用于定义一组相关类的基类,可以包含一些共享的属性和方法。

对于List这个接口来说,它定义了一组我们希望所有列表类型对象都具备的行为。它不需要定义任何共享的行为或者其他类似的内容。它只需要简单地说明“所有希望被称为列表的对象都应该具备这些功能”。

如果List被定义为一个抽象类,那么所有想要实现List的类都必须继承它。这样做的问题是,Java中的类只能继承一个父类,如果一个类已经继承了其他类,就无法再继承List这个抽象类。这就限制了类的灵活性和可扩展性。

而将List定义为一个接口,可以使得多个类同时实现List接口,从而实现多态性。这样一来,我们可以定义多个不同的列表类型,它们都具备了List接口所定义的行为,但是可以有不同的实现方式。这样就更加灵活和可扩展了。

总结起来,List被定义为接口而不是抽象类的原因是为了实现更好的灵活性和可扩展性。通过接口的方式,可以实现多个类同时实现List接口,从而实现多态性。这样一来,我们可以定义多个不同的列表类型,它们都具备了List接口所定义的行为,但是可以有不同的实现方式。这样就更加灵活和可扩展了。

0