如果我们有抽象类,为什么在Java中接口?

时间:2013-06-26 06:53:40

标签: java interface

我有两个问题

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

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

  3. 先谢谢。

5 个答案:

答案 0 :(得分:3)

  1. 就像你说的那样,你只能从一个抽象类继承,但是很多接口。此外,继承意味着“is-a”关系,但是接口指定了对象必须支持的一组操作 - 实质上是它的行为。我认为这些是独立的想法。根据我的经验,课程往往是名词(例如IntegerList),接口是动词(例如CloneableSerializable)。

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

答案 1 :(得分:2)

接口在这些上下文中很有用:

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

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

3->也可用作可串行接口

的可标记接口

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

答案 2 :(得分:1)

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

只需查看ArrayList类:

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

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

2nd)接口中没有变量。默认情况下,它们为public final

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

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

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

答案 3 :(得分:1)

1

  

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

是。另请参阅Interface vs Abstract Class (general OO)

  

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

2

  

接口中变量的用途是什么?需要示例程序来说明接口中变量的使用情况。

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

答案 4 :(得分:1)

  

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

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

  

接口中变量的用途是什么?需要示例程序   欢迎在接口中使用变量的状态。

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

中定义它们