2016-12-27 13 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

:あなたは、あなたが以下のようabstractクラスに行きたいと思うかもしれません下の可視性を持っているしたい場合は

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

としてそれらを定義する必要があり

自動的に 'public'として定義され、継承時に可視性を下げることができないので、インタフェースを実装しながらpublicとして定義する必要があります(public String Data()throw Exs {...}) – SomeJavaGuy

+0

何あなたは '明示的な実装 'を意味しますか? @ KevinEscheは正しいです、常に常public([related QA](http:// stackoverflow。com/questions/9614708/why-should-we-declare-interface-methods-as-public)を参照してください)。 –

+0

継承されたメンバーの可視性を低下させる可能性はありますか? – Karthikk

答えて

1

インタフェースは、他のクラスにパブリック機能を公開するために、単純です。インターフェイスを使用して、コード外の人がコードとやりとりできるようにします。これを行うには、メソッドをpublicに定義する必要があります。

強制的にプライベートメソッドのセットをオーバーライドしたい場合は、一連の抽象メソッドで抽象クラスを宣言することができます。

0

あなたはメソッドの可視性を減らすこと、あなたが現在やっているんcan't:

アクセス修飾子の国民は(6.6)インタフェース宣言のあらゆる種類に関係JLS 9.1.1を与えられました。

を次のようにオーバーライドまたは隠蔽方法のアクセス修飾子(6.6)は、オーバーライド又は隠し方式と少なくとも同じくらいのアクセスを提供しなければならない JLS 8.4.8.3

で定義されたルールを考える

オーバーライドまたは非表示のメソッドがpublicである場合、オーバーライドまたは非表示のメソッドはpublicでなければなりません。それ以外の場合は、コンパイル時エラーが発生します。 [...]

あなたはit'sはinterface内で定義されたすべてのメソッドはアクセス修飾子が提供されていない場合でも、暗黙的にpublicであると定義されて見ることができるように。後のJLSの部分では、与えられたメソッドの可視性を減らすことはできないので、のメソッドの明示的な実装をpublic修飾子なしで定義した結果は、コンパイル時エラーになりますメソッドの可視性を下げるようにしてください。方法interface` `Javaで

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; 
} 
関連する問題