【发布时间】:2011-01-09 04:53:48
【问题描述】:
将接口声明为抽象有什么意义?接口方法也是如此。有道理吗?
例如。
public abstract interface Presenter {
public abstract void go(final HasWidgets container);
}
【问题讨论】:
将接口声明为抽象有什么意义?接口方法也是如此。有道理吗?
例如。
public abstract interface Presenter {
public abstract void go(final HasWidgets container);
}
【问题讨论】:
问题:我们可以用“abstract”关键字声明一个接口吗? 答:是的,我们可以用“abstract”关键字声明一个接口。但是,没有必要那样写。 java中的所有接口默认都是抽象的。同样适用于接口方法
请扔掉这个链接 https://javaconceptoftheday.com/java-interview-questions-on-interfaces/
自 JAVA8 以来接口可以有静态方法
【讨论】:
“为什么将接口声明为抽象的?”-我也有同样的问题,并认为抽象是多余的。但是当我在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();
}
【讨论】:
接口方法的抽象修饰符和公共修饰符一样总是多余的。
由于严格的技术原因,接口本身的 abstract 修饰符可能是多余的,因为永远不能使用 new 运算符实例化接口,并且如果通过反射询问接口将始终是抽象的。
但是,声明接口抽象可能有语义原因(各种 UML 工具也支持): 您可能希望以非抽象类可能不会直接实现接口而只能通过子接口实现接口的方式明确声明接口是抽象的。 所以例如您可能会认为接口 Node 在语义上是抽象的,而扩展 Node 的子接口 Folder 和 File 在语义上不是抽象的。你永远不会有一个只是一个节点的实例——它要么是一个文件夹,要么是一个文件。
还有一些框架允许“实例化”接口(技术上通过动态代理)。不允许提供某些接口(例如预定义的基本接口)作为参数。出于文档目的,在源代码中使用 abstract 修饰符来表达此类信息是有意义的。
【讨论】:
您在哪里看到了您发布的大量代码,任何旧的 Java 代码库?
这就是JLS 不得不说的:
9.1.1.1 抽象接口:
每个接口都是隐式抽象的。此修饰符已过时,不应
在新程序中使用。
9.4 抽象方法声明:
为了与旧版本的 Java 平台兼容,允许但
从风格上讲,不鼓励过多地指定抽象修饰符
用于接口中声明的方法。
【讨论】:
看看这篇文章
接口是 %100 抽象类。
关键字abstract在这里是多余的
【讨论】:
没有必要将接口声明为抽象的。由于接口中的方法只是抽象的.. 还有一件事,抽象类可以同时具有具体和抽象方法,但在接口中应该只有抽象方法。
【讨论】:
没有区别 - 接口和接口方法始终是抽象的,但您不必添加修饰符(接口方法始终是公共的,因此您也不需要 public 修饰符)。
来自JLS:
9.1.1.1 抽象接口
每个接口都是隐式抽象的。这 修饰符已过时,不应 用于新程序。
【讨论】:
我认为只是冗长、明确和与类语法和语义的一致性......
您不必这样做,但如果您的代码的某些读者分心或不太精通 Java,这可能会有所帮助。
【讨论】:
接口的默认行为本质上等同于您在示例中的行为。将其定义为抽象只是多余的。
【讨论】:
接口和接口方法是隐含的abstract,即使没有这样声明。所以不需要明确指定。
【讨论】:
public,因此声明它们也是多余的。
通常,您不会将接口或其方法声明为抽象的。它们是隐含的。
这些方法也是公开的,所以你也可以跳过它。 :-)
【讨论】: