4

我们有类似的东西

List lst = new LinkedList();

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

4

3 回答 3

9

接口和抽象类用于不同的目的。看到这个问题

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

于 2012-08-08T05:51:57.937 回答
0

如果一个类已经在扩展另一个类它不能在你的情况下扩展 List。

基本上你必须了解抽象类和接口之间的区别

或者您可以阅读Effective Java中的第 18 条以获得更好的理解。

于 2012-08-08T06:09:42.903 回答
0

列表 lst = new LinkedList();

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

集合是 100% 抽象的。不同类型的集合具有不同的属性。例如,List具有允许复制的属性的集合。秩序很重要。等 Set 是一个集合,其属性为不允许重复。订单可能不重要等

所以由于不同的Collection类型不需要共同的实现逻辑,所以不需要创建Abstract Class。

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

通过 Oleksi 指定的接口和抽象类之间的区别。此外,我想简化事情。OOP中的主要概念是抽象,它是广义概念。人是动物。动物是生物。现在,Living Thing 是最高级别的抽象。这里要说明的是,如果接口抽象是 100%。在抽象类的情况下,抽象可以在 0 到 100% 之间变化。

通常,当需要默认提供某些功能时使用抽象类,其余的取决于要扩展它的类。例如,假设 Animal 是抽象类。每个动物都有共同的东西,比如 creatEnergy(),它有共同的东西,比如食物转化为蛋白质、脂肪等,这是很常见的。所以这个实现对所有动物都是一样的。但是对于 Man、Bird、Fish 等动物,moving() 等其他内容可能会有所不同。因此,不同的动物可能会以不同的方式实现它。因此,这里的抽象从 0 到 100 % 不等。

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

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

于 2012-08-08T07:08:57.207 回答