7

我有两个问题

  1. 即使抽象类可以完成接口的功能,为什么我们还需要java中的接口?
    在搜索中,我发现抽象类无法完成接口功能的地方,即一个类需要实现多个接口。
    这是在java中提出接口概念的唯一原因吗?

  2. 接口中静态最终变量的用途是什么?欢迎需要说明接口中变量使用情况的示例程序。

提前致谢。

4

5 回答 5

4
  1. 就像您说的,您只能从一个抽象类继承,但可以继承许多接口。此外,继承意味着“is-a”关系,但接口指定了对象必须支持的一些操作集——本质上是它的行为。我将这些视为不同的想法。根据我的经验,类往往是名词(例如IntegerList),而接口是动词(例如CloneableSerializable)。

  2. 如果一个类实现了一个带有常量的接口,那么该类可以引用那些没有限定类名的常量(javapractices.com)。但是,正如这篇文章所解释的,这是一种不好的做法。

于 2013-06-26T06:54:58.223 回答
4

接口在这些情况下很有用:

1->正如您所提到的,在Java中我们只能扩展一个类,但可以实现多个接口。这确实是一种实现,例如,如果您想在您的类中创建一个后台线程并扩展一些类以实现可重用性,那么有多糟糕你扩展线程类?在这种情况下,Runnable 来救援它是一个接口。

2->还接口帮助我们强制执行某种设计模式。

3-> 也可用作可标记接口,如可序列化接口的情况

接口中的变量是静态变量,充当全局变量,可以与实现该接口的所有类共享

于 2013-06-26T07:03:54.907 回答
2

即使抽象类可以完成接口的功能,为什么我们还需要java中的接口?在搜索中,我发现抽象类无法完成接口功能的地方,即一个类需要实现多个接口。这是在java中提出接口概念的唯一原因吗?

Java 不支持多类继承。所以你可以实现多个接口。更重要的是,您可以同时实现接口和扩展其他类。如果您使用抽象类代替接口,这是不可能的。

接口中的变量有什么用?欢迎需要说明接口中变量使用情况的示例程序。

您在接口中声明的任何“字段”都将是公共静态最终字段。换句话说,一个常数。因此,如果您想在所有子类中使用任何常量,那么您可以在接口中定义它们

于 2013-06-26T07:02:07.623 回答
1

1st)简单地说:您的类可以实现几乎无限数量的接口,但只能扩展一个(抽象)类。抽象类可能包含代码——通常是子类之间共享的基本实现。

看看ArrayList类:

public class ArrayList<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, Serializable

如果没有接口,这将是不可能的......

2nd)接口中没有变量。它们是public final默认的。

3rd)使用接口,例如,您可以使用接口作为元素类型创建集合,并用完全不同类型的对象填充它,这些对象没有共同的基类(省略Object)。

如果没有接口,您只能拥有一个Objects 集合并检查每个对象的类型和强制转换。

使用接口,您可以将它们视为此接口的实现,并在它们上调用接口的方法,甚至不知道它们的具体类型。

于 2013-06-26T06:57:19.370 回答
1

1.

这是在java中提出接口概念的唯一原因吗?

是的。另请参阅接口与抽象类(一般 OO)

接口可能是多重继承的,抽象类可能不是(这可能是接口与抽象类分开存在的关键具体原因——它们允许实现多重继承,从而消除了一般 MI 的许多问题)。

2.

接口中的变量有什么用?欢迎需要说明接口中变量使用情况的示例程序。

你的意思是静态变量?我永远不会在接口中使用“有状态的”静态变量,但静态常量非常好——这样您就可以添加与接口定义方式相关的附加信息。

于 2013-06-26T07:00:39.883 回答