我理解接口方法是隐式的public。Java Docs教程说
接口中的所有
abstract、default和static方法都是隐式public,因此可以省略公共修饰符。
除了抽象、静态和默认之外,这些修饰符都是在Java 8中隐式声明的。
我以为abstract不再被隐式声明了,因为Java8在接口中引入了default方法,但是我仍然在Intellij 中得到了一个警告。
修饰符'
abstract‘对于接口方法来说是多余的。
public interface TestInterface {
abstract int print(); // abstract redundant ?.
int print2(); //legal.but public or public abstract ?.
}发布于 2018-02-20 17:53:40
语言规范 --特别是第9.4节,指出abstract和public是隐式的。
接口主体中的每个方法声明都是隐式公开的(§6.6)。允许为接口中的方法声明指定公共修饰符,但作为一种风格,这是允许的,但作为一种风格,这是不可取的。 缺少默认修饰符或静态修饰符的接口方法是隐式抽象的,因此它的主体是用分号表示的,而不是块。允许为这样的方法声明指定抽象修饰符,但作为一种风格,这是允许的,但作为一种方式,它是不被鼓励的。
这就是为什么IntelliJ警告您;通过JLS,您正在做一些完全多余的事情。
作为奖励,接口中的字段是隐式的public static final
接口主体中的每个字段声明都是隐式的公共、静态和最终的。允许冗余地为这些字段指定任何或所有这些修饰符。
发布于 2018-02-20 17:47:16
在Java 7中,以及在Java 8中,接口中定义的所有fields都是始终是 public、static和final。方法有public法和abstract法。
因为您的print()方法没有一个主体,所以它意味着这是一个抽象方法。换句话说,不需要显式声明abstract,这就是为什么Intellij IDEA说是redundant。
没有static或default的方法并不是隐式抽象的,即使它有一个主体。具有非默认或静态主体的非抽象方法不能存在于接口中.
发布于 2018-02-20 18:54:23
访问修饰符
在Java 8中,我们按照Java文档教程,
接口中的所有抽象、默认和静态方法都是隐式公共,因此可以省略公共修饰符。
因此,自Java 8开始,接口中唯一允许的访问修饰符是公共。(Java 9引入了私有接口方法)
public interface TestInterface {
int print();//compiles and no IDE warning
public int print1();//public redundant
}可选说明符
abstract -接口中的方法--而不是声明为默认或静态是隐式抽象,因此抽象修饰符是可选的。但在这种情况下,不能提供方法实现。
static-静态需要显式指定并提供实现。
final -不能覆盖最后的方法,接口方法也不允许。
如果提供了默认实现,则可以显式声明default -方法。
接口中的所有字段都是public、static和final。
https://stackoverflow.com/questions/48889674
复制相似问题