首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 8中接口方法的隐式说明符/修饰符是什么?

Java 8中接口方法的隐式说明符/修饰符是什么?
EN

Stack Overflow用户
提问于 2018-02-20 16:19:01
回答 3查看 2.8K关注 0票数 2

我理解接口方法是隐式的publicJava Docs教程

接口中的所有abstractdefaultstatic方法都是隐式public,因此可以省略公共修饰符。

除了抽象、静态和默认之外,这些修饰符都是在Java 8中隐式声明的。

我以为abstract不再被隐式声明了,因为Java8在接口中引入了default方法,但是我仍然在Intellij 中得到了一个警告。

修饰符'abstract‘对于接口方法来说是多余的。

代码语言:javascript
复制
public interface TestInterface {
    abstract int print();  // abstract redundant ?.
    int print2(); //legal.but public or public abstract ?.
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-20 17:53:40

语言规范 --特别是第9.4节,指出abstractpublic是隐式的。

接口主体中的每个方法声明都是隐式公开的(§6.6)。允许为接口中的方法声明指定公共修饰符,但作为一种风格,这是允许的,但作为一种风格,这是不可取的。 缺少默认修饰符或静态修饰符的接口方法是隐式抽象的,因此它的主体是用分号表示的,而不是块。允许为这样的方法声明指定抽象修饰符,但作为一种风格,这是允许的,但作为一种方式,它是不被鼓励的。

这就是为什么IntelliJ警告您;通过JLS,您正在做一些完全多余的事情。

作为奖励,接口中的字段是隐式的public static final

接口主体中的每个字段声明都是隐式的公共、静态和最终的。允许冗余地为这些字段指定任何或所有这些修饰符。

票数 6
EN

Stack Overflow用户

发布于 2018-02-20 17:47:16

在Java 7中,以及在Java 8中,接口中定义的所有fields都是始终是 publicstaticfinal。方法有public法和abstract法。

因为您的print()方法没有一个主体,所以它意味着这是一个抽象方法。换句话说,不需要显式声明abstract,这就是为什么Intellij IDEA说是redundant

没有staticdefault的方法并不是隐式抽象的,即使它有一个主体。具有非默认或静态主体的非抽象方法不能存在于接口中.

票数 3
EN

Stack Overflow用户

发布于 2018-02-20 18:54:23

访问修饰符

在Java 8中,我们按照Java文档教程

接口中的所有抽象、默认和静态方法都是隐式公共,因此可以省略公共修饰符。

因此,自Java 8开始,接口中唯一允许的访问修饰符是公共。(Java 9引入了私有接口方法)

代码语言:javascript
复制
public interface TestInterface {
    int print();//compiles and no IDE warning
    public int print1();//public redundant
}

可选说明符

abstract -接口中的方法--而不是声明为默认或静态隐式抽象,因此抽象修饰符是可选的。但在这种情况下,不能提供方法实现。

static-静态需要显式指定并提供实现。

final -不能覆盖最后的方法,接口方法也不允许。

如果提供了默认实现,则可以显式声明default -方法。

接口中的所有字段都是publicstaticfinal

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48889674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档