Java 为什么列表不能简单地定义为一个抽象类而不是一个接口?

Java 为什么列表不能简单地定义为一个抽象类而不是一个接口?,java,collections,interface,Java,Collections,Interface,我们有 List lst = new LinkedList(); 这表明列表是某种类型的类。那么,为什么称它为接口呢?我们可以简单地称之为实现集合的抽象类。接口和抽象类用于不同的目的。看 列表定义了我们希望列表类型对象具有的一组行为,而不是数据结构层次结构的基础。它不需要指定任何共享行为或类似的内容。它只是简单地说“所有想称自己为列表的东西都应该能够做这些事情”如果一个类已经在扩展另一个类,它就不能在您的情况下扩展列表。 基本上,你必须理解这个问题 或者您也可以阅读中的第18项以便更好地理解。

我们有

List lst = new LinkedList();

这表明列表是某种类型的类。那么,为什么称它为接口呢?我们可以简单地称之为实现集合的抽象类。

接口和抽象类用于不同的目的。看


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

如果一个类已经在扩展另一个类,它就不能在您的情况下扩展列表。

基本上,你必须理解这个问题

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

List lst=new LinkedList()

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

收集是100%的抽象。不同类型的集合具有不同的属性。 例如 列表是一个属性为允许复制的集合。秩序很重要。等 Set是一个属性为“不允许重复”的集合。秩序可能不重要等等

所以,由于在不同的集合类型中不需要通用的实现逻辑,所以不需要创建抽象类

也 List lst=newlinkedlist(); 提供运行时多态性的一些好处。 您可以使用一些将参数作为列表的代码,例如process(List lst)。 这里同样的代码可以通过传递LinkedList或ArrayList等来使用。 让我不要再详述了

检查接口和Oleksi指定的抽象类之间的差异。 此外,我想把事情简化。 OOPs的主要概念是抽象,抽象是广义概念。人是动物。动物是有生命的东西。现在生物是抽象的最高层次。 这里要指出的一点是,在接口抽象的情况下是100%。在抽象类的情况下,抽象可以在0到100%之间变化

通常,当默认情况下需要提供某些功能时,使用抽象类,而rest依赖于将要扩展它的类。例如 假设动物是抽象类。每种动物都有共同的东西,比如creatEnergy(),它把共同的东西作为食物转化成蛋白质、脂肪等,这是共同的。所以这个实现对所有动物都是一样的。 但在人、鸟、鱼等动物的情况下,诸如移动之类的事情可能会有所不同。因此,不同的动物可能会以不同的方式执行它。因此,这里的抽象从0%到100%不等

同样,Java类只能扩展一个类,但可以实现不同的接口。 所以接口为类提供了一种方式,使其在不同的时间具有接口提供的不同行为


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

我不应该因为透露列表是一个接口而受到否定。。。。。此外,问题不在于何时使用抽象类或接口,而在于列表是抽象类还是接口