我有一个场景,我们过去常常使用C#中的显式实现来实现接口成员。目前我需要在JAVA中实现相同的行为,但是无法显式调用接口成员,因此将实现的成员标记为public会显示错误。我是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;
}
答案 0 :(得分:1)
接口仅用于将公共功能公开给其他类。您使用接口允许代码外部的人员与您的代码进行交互。为此,您需要将方法公开。
如果您想强制某人覆盖一组给定的私有方法,您可能希望使用一系列抽象保护方法声明一个抽象类。
答案 1 :(得分:0)
你无法做你目前正在做的事情,降低了方法的可见性:
中定义的规则访问修饰符public(第6.6节)适用于各种接口声明。
覆盖或隐藏方法的访问修饰符(第6.6节)必须至少提供与重写或隐藏方法一样多的访问权限,如下所示:
如果被覆盖或隐藏的方法是公共的,那么覆盖或隐藏方法必须是公开的;否则,发生编译时错误。 [....]
正如您所看到的那样,定义interface
中定义的每个方法都是隐含的public
,即使没有提供访问修饰符也是如此。鉴于后面的JLS部分中的规则不可能降低给定方法的可见性,因此您在没有WF_33470
修饰符的类public
中定义方法的显式实现的结果当您尝试降低方法可见性时,将是编译时错误。
您需要将它们定义为
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;
}