首页 > 解决方案 > Java 9 接口:为什么将默认修饰符转换为公共修饰符

问题描述

我的问题是关于interface. 我创建了一个接口并定义了四个方法:第一个方法是一个private方法;二是default方法;三是static方法;第四是abstract方法。
编译此接口并检查其配置文件后:default方法被转换为public方法,并且staticabstract方法都有一个前置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.class
Compiled from "InterfaceProfile.java"
interface com.doubt.session.InterfaceProfile {
  public void defaultM();
  public static void staticM();
  public abstract void doStuff();
}

标签: javainterfacejava-9method-modifier

解决方案


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

这是教程所说的:

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


推荐阅读