为什么将接口声明为抽象?

时间:2010-01-25 17:29:52

标签: java oop interface

将接口声明为抽象是什么意思?接口方法也是如此。有没有意义呢?

例如

public abstract interface Presenter {
 public abstract void go(final HasWidgets container);
}

11 个答案:

答案 0 :(得分:66)

你在哪里遇到过你发布的代码块,任何旧的java代码库?
这就是JLS所说的:

9.1.1.1抽象接口:
每个接口都是隐式抽象的。此修饰符已过时,不应该 用于新程序。

9.4抽象方法声明:
为了与旧版本的Java平台兼容,允许使用它 作为一种风格,不鼓励冗余地指定抽象修饰符 对于在接口中声明的方法。

答案 1 :(得分:28)

即使没有声明,接口和接口方法也是隐式abstract。所以没有必要明确指定它。

答案 2 :(得分:4)

没有区别 - 接口和接口方法总是抽象的,但你不必添加修饰符(并且接口方法总是公共的,因此你也不需要公共修饰符)。

来自JLS

  

9.1.1.1抽象接口

     

每个接口都是隐式抽象的。这个   修饰符已过时,不应该   用于新程序。

答案 3 :(得分:2)

通常,您不会将接口或其方法声明为抽象。它们是隐含的。

这些方法也是公开的,所以你也可以跳过它。 : - )

答案 4 :(得分:1)

看一下这篇文章

https://stackoverflow.com/questions/4380796/what-is-public-abstract-interface-in-java/4381308#4381308

接口是%100抽象类。

关键字抽象在这里是多余的

答案 5 :(得分:1)

"为什么要将接口声明为抽象?" - 我得到了同样的问题,并认为抽象是多余的。但是当我在java 1.8中看到Map接口时不得不重新思考。可能这在java中必须改变

//  (version 1.8 : 52.0, no super bit)
// Signature: <K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/lang/Object;
public abstract interface java.util.Map {

  // Method descriptor #1 ()I
  public abstract int size();
}

答案 6 :(得分:0)

接口的默认行为基本上与示例中的行为相同。将其定义为抽象只是多余的。

答案 7 :(得分:0)

我认为只是冗长,明确和与语法和语义的一致性......

您没有必要,但如果您的代码的某些读者分散注意力或者不精通Java,那么它可能会有所帮助。

答案 8 :(得分:0)

没有必要声明接口是抽象的。由于接口中的方法只是抽象的.. 抽象类还可以同时具有具体和抽象方法,但在界面中应该只有抽象方法。

答案 9 :(得分:0)

接口方法的abstract修饰符总是多余的以及public修饰符。

由于严格的技术原因,接口本身的抽象修饰符可能是冗余的,因为接口永远不能使用new运算符进行实例化,如果通过反射询问,接口将始终是抽象的。

但是,声明接口抽象可能存在语义原因(各种UML工具也支持): 您可能希望表示接口是以非抽象类可能不直接实现接口但仅通过子接口的方式显式声明为abstract的。 所以例如您可以将接口Node视为语义抽象,而扩展Node的子接口Folder和File在语义上不是抽象的。你永远不会有一个只是一个节点的实例 - 它将是一个文件夹或一个文件。

甚至还有一些框架可以实现接口的“实例化”(技术上通过动态代理)。有些接口(例如预定义的基本接口)不允许作为参数提供。出于文档目的,在源代码中使用abstract修饰符来表达此类信息是有意义的。

答案 10 :(得分:0)

问题:我们可以用“抽象”关键字声明一个接口吗? 答:是的,我们可以使用“抽象”关键字声明一个接口。但是,没有必要这样写。 Java中的所有接口默认都是抽象的。接口方法也一样

请转到该链接 https://javaconceptoftheday.com/java-interview-questions-on-interfaces/

从JAVA8开始,界面可以使用静态方法