声明一个接口为抽象的意义在哪里?同样,对于接口方法也是这样。它有什么意义吗?
例如:
public abstract interface Presenter {
public abstract void go(final HasWidgets container);
}
即使未被声明为抽象的,接口和接口方法也是隐式的抽象
的。因此,没有必要明确指定。
public
访问修饰符,因此将它们声明为 public
是多余的。 - matt b9.1.1.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();
}
看一下这篇文章
接口是 %100 抽象类。
这里的关键字abstract是多余的。
一个接口方法的抽象修饰符总是冗余的,public修饰符也是如此。
对于一个接口本身来说,抽象修饰符可能出于一个严格的技术原因而是多余的,因为接口永远不能使用new运算符来实例化,并且通过反射访问时,接口将始终是抽象的。
然而,声明接口为抽象的可能存在语义上的原因(这也得到了各种UML工具的支持):您可能希望表达一个接口是显式地声明为抽象的,以便非抽象类不能直接实现该接口,但只能通过子接口间接实现。例如,您可能认为接口Node在语义上是抽象的,而扩展Node的子接口Folder和File在语义上并不是抽象的。您永远不会拥有只是Node的实例 - 它将是Folder或File中的一个。
甚至更进一步,有些框架允许"实例化"接口(在技术上通过动态代理)。其中某些接口(例如预定义的基础接口)不允许作为参数提供。出于文档目的,在源代码中使用抽象修饰符来表示这些信息可能是有意义的。
接口的默认行为与您的示例基本相同。将其定义为抽象只是多余的。
我认为只有冗长、明确和与类语法和语义一致性...
你不必这样做,但如果代码的某个读者分心或不太熟悉Java,这可能会有所帮助。