亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 171 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號