2016-12-27 60 views
1

我有我們用來實現在C#中使用顯式實現的接口成員的場景。目前我需要在JAVA中實現相同的行爲,但不能顯式調用接口成員,因此它顯示錯誤標記實現的成員爲public。我是JAVA新手,請讓我知道如何在JAVA中實現相同的行爲。如何使用JAVA明確實現接口成員?

C#代碼:

public class WF_33470: IData 
{ 
    private string m_data = string.Empty; 
    string IData.Element 
    { 
     get 
     { 
      return m_data; 
     } 
    } 
    string IData.Data() 
    { 
     get 
     { 
      return "Hello World"; 
     } 
    { 
} 

    internal interface IData 
    { 
     string Element 
     { 
      get; 
     } 
     string Data(); 
    } 

Java代碼:

public class WF_33470 implements IData 
{ 
    private String m_data = ""; 
    String getElement()throws Exception{//throws error to change the modifier to be public, but i need to achieve explicit implementation here 
     return m_data; 
    } 
    String Data()throws Exception{//throws error to change the modifier to be public, but i need to achieve explicit implementation here 
     return "Hello World"; 
    } 
} 

interface IData 
{ 
    String getElement()throws Exception; 
    String Data()throws Exception; 
} 
+1

被自動定義爲'public',並且當繼承你需要將它們定義爲public時,你不能降低可見性,同時實現該接口,並且('public String Data()throws Exception {...}') – SomeJavaGuy

+0

你的意思是「明確實施」嗎? @KevinEsche是對的,接口總是公開的([相關QA](http:// stackoverflow。COM /問題/ 9614708 /爲什麼,應該-WE-聲明接口的方法,如公共))。 –

+0

有沒有可能降低繼承的成員的可見性? – Karthikk

回答

1

接口都只是爲了揭露公開功能的其他類。您使用接口允許代碼之外的人員與您的代碼進行交互。要做到這一點,你需要定義公開的方法。

如果您想強制某人重寫一組給定的私有方法,您可能需要用一系列抽象保護方法聲明一個抽象類。

0

您不容目前做你在做什麼,減少方法的可見性:

給出JLS 9.1.1

訪問修飾符公衆(6.6節)涉及到各種接口聲明的。在JLS 8.4.8.3

訪問修飾符定義

給出的規則(6.6節)壓倒一切的或隱藏方法必須提供至少儘可能多訪問作爲被覆蓋的或隱藏的方法,如下所示:

如果重寫或隱藏的方法是公開的,則重寫或隱藏方法必須是公共的;否則,會發生編譯時錯誤。 [....]

正如你可以看到it's定義一個interface內定義的每個方法是含蓄public,即使沒有設置訪問修飾符。鑑於後面的JLS部分中的規則,不可能減少給定方法的可見性,所以如果在沒有public修飾符的情況下定義類WF_33470中方法的顯式實現的結果將會是編譯時錯誤嘗試降低方法的可見性。

你需要將它們定義爲

public String getElement()throws Exception{ 
    return m_data; 
} 
public String Data()throws Exception{ 
    return "Hello World"; 
} 

如果你想有你可能想用abstract類去如下低能見度:

public class WF_33470 extends IData { 
    private String m_data = ""; 

    String getElement() throws Exception { 
     return m_data; 
    } 

    String Data() throws Exception { 
     return "Hello World"; 
    } 
} 

abstract class IData { 
    abstract String getElement() throws Exception; 

    abstract String Data() throws Exception; 
} 
在Java`interface`方法
相關問題