为了账号安全,请及时绑定邮箱和手机立即绑定

Java 9 接口:为什么将默认修饰符转换为公共修饰符

Java 9 接口:为什么将默认修饰符转换为公共修饰符

江户川乱折腾 2022-06-08 16:39:07
我的问题是关于interface. 我创建了一个接口并定义了四个方法:第一个方法是一个private方法;二是default方法;三是static方法;第四是abstract方法。编译此接口并检查其配置文件后:default方法被转换为public方法,并且static和abstract方法都有一个前置public修饰符。为什么是这样?代码: interface InterfaceProfile {    private void privateM() {   //this method is hidden        System.out.println("private Method");    }    default void defaultM() {        System.out.println("Default Method");    }    static void staticM() {        System.out.println("Static Method");    }    void doStuff(); //by default adds the public modifier}接口配置文件类    D:\Linux\IDE\Workspace\OCA-Wrokspace\Ocaexam\src>javap mods\com\doubt\session\InterfaceProfile.classCompiled from "InterfaceProfile.java"interface com.doubt.session.InterfaceProfile {  public void defaultM();  public static void staticM();  public abstract void doStuff();}
查看完整描述

3 回答

?
森栏

TA贡献1810条经验 获得超5个赞

它是一种方法的事实default并没有什么不同。隐含范围是public.

这是教程所说的:

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


查看完整回答
反对 回复 2022-06-08
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

简单:默认情况下,接口中的所有方法都是public。您可以通过应用来限制private它,但只要您不这样做,默认值就会生效。因此:根本没有发生转换。

引用Java 语言规范

接口主体中的方法可以声明为公共的或私有的(第 6.6 节)。如果没有给出访问修饰符,则该方法是隐式公共的。允许但不鼓励在接口中为方法声明冗余地指定 public 修饰符。

(在接口中拥有私有方法的能力是在 Java 9 中引入的,因为人们发现 Java 8 的默认方法通常需要拥有这些默认方法可以使用的私有方法,而不会使这些辅助方法公开可见)


查看完整回答
反对 回复 2022-06-08
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

默认修饰符是公共的,因为这是定义接口声明的方式: https ://docs.oracle.com/javase/tutorial/java/IandI/interfaceDef.html

如果你问这背后的原因,我认为定义接口的目的是确保所有实现类的接口,这意味着所有实现类都有明确的约定,它们需要提供哪些公共可访问方法.

向接口添加私有方法并不能满足这个主要目的,而且似乎更像是一种实现提示。私有和抽象方法是对接口的后期添加。


查看完整回答
反对 回复 2022-06-08
  • 3 回答
  • 0 关注
  • 182 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号