调用方法未在Java中实现的接口的接口中定义
我在Java中有以下场景。 假设我有一个接口,以及两个实现此接口的类。 如下:
公共接口myInterface {
public String printStuff();
}
公共类A实现myInterface {
@Override public String printStuff(){ return "Stuff"; }
}
公共类B实现myInterface {
@Override public String printStuff(){ return "Stuff"; } public String printOtherStuff(){ return "Other Stuff"; }
}
如果我按如下方式定义它,如何调用上面的printOtherStuff方法:
public void Main(){ myInterface myinterface = new B(); String str = myinterface.printOtherStuff(); // ? This does not work }
上面的调用代码似乎不起作用。 有任何想法吗?
myInterface myinterface = new B();
myinterface
的引用类型是myInterface
。 这意味着您只能访问界面中定义的方法。 您可以将其强制转换为B
类以进行方法调用。
注意 :从现在开始,我将使用正确的命名约定。
例
MyInterface myInterface = new B(); String str = ((B)myInterface).printOtherStuff();
只是一个关于此的说明
如果您需要这样做,那么您需要查看您的课程设计。 以这种方式使用interface
的想法是从对象的具体实现的细节中抽象出来。 如果您必须执行这样的显式转换,那么您可能希望查看更改接口以适应必要的方法,或者更改类以便将方法移动到全局位置(如util
文件或东西)。
额外阅读
你应该在这里阅读有关引用类型的内容,你应该看看这里的转换 。 我的答案是对这两件事的理解的结合。
作为补充说明,请查看Java命名约定 。 对于任何Java开发人员而言,这是制作可理解代码的重要信息。
当然这不起作用,因为你有Interface MyInterface
引用类型。 在方法绑定时,编译器会尝试在您的Interface MyInterface
找到此方法,该方法不可用。 所以你需要像这样把它投射到你的class级。
MyInterface myInterface = new B(); B newB=(B) myInterface ;//casting to class newB.printOtherStuff();// would work fine