2016-12-27 57 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`方法
相关问题