第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

為什么我不能在接口中聲明靜態(tài)方法?

為什么我不能在接口中聲明靜態(tài)方法?

慕姐8265434 2019-11-08 10:49:30
該主題充分說明了這一點-為什么不能在接口中聲明靜態(tài)方法的原因是什么?public interface ITest {    public static String test();}上面的代碼給了我以下錯誤(至少在Eclipse中):“接口方法ITest.test()的非法修飾符;僅允許public和abstract”。
查看完整描述

3 回答

?
郎朗坤

TA貢獻1921條經(jīng)驗 獲得超9個贊

這里有一些問題。第一個問題是聲明靜態(tài)方法而不定義它的問題。這是之間的區(qū)別


public interface Foo {

  public static int bar();

}


public interface Foo {

  public static int bar() {

    ...

  }

}

出于Espo提到的原因,第一個是不可能的:您不知道哪個實現(xiàn)類是正確的定義。


Java 可以允許后者。實際上,從Java 8開始,它確實做到了!


查看完整回答
反對 回復(fù) 2019-11-08
?
慕妹3146593

TA貢獻1820條經(jīng)驗 獲得超9個贊

接口中不能使用靜態(tài)方法的原因在于Java解析靜態(tài)引用的方式。嘗試執(zhí)行靜態(tài)方法時,Java不會費心尋找類的實例。這是因為靜態(tài)方法不依賴于實例,因此可以直接從類文件中執(zhí)行。假設(shè)接口中的所有方法都是抽象的,則VM必須尋找該接口的特定實現(xiàn),以便找到靜態(tài)方法后面的代碼,以便可以執(zhí)行它。然后,這與靜態(tài)方法解析的工作方式矛盾,并會在語言中引入不一致之處。


查看完整回答
反對 回復(fù) 2019-11-08
?
偶然的你

TA貢獻1841條經(jīng)驗 獲得超3個贊

謊言在設(shè)計原理的原因,那Java不允許多重繼承。下例可以說明多重繼承的問題:


public class A {

   public method x() {...}

}

public class B {

   public method x() {...}

}

public class C extends A, B { ... }

現(xiàn)在,如果您調(diào)用Cx()會發(fā)生什么?將執(zhí)行Ax()還是Bx()?具有多重繼承的每種語言都必須解決此問題。


接口在Java中允許某種受限的多重繼承。為避免上述問題,不允許他們使用方法。如果我們在接口和靜態(tài)方法上看同樣的問題:


public interface A {

   public static method x() {...}

}

public interface B {

   public static method x() {...}

}

public class C implements A, B { ... }

同樣的問題在這里,如果調(diào)用Cx()會發(fā)生什么?


查看完整回答
反對 回復(fù) 2019-11-08
  • 3 回答
  • 0 關(guān)注
  • 996 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號