我在 Java 中有以下场景。假设我有一个接口(interface)和两个实现该接口(interface)的类。如下:
public interface myInterface {
public String printStuff();
}
public class A implements myInterface {
@Override
public String printStuff(){
return "Stuff";
}
}
public class B implements myInterface {
@Override
public String printStuff(){
return "Stuff";
}
public String printOtherStuff(){
return "Other Stuff";
}
}
如果我定义如下,如何调用上面的printOtherStuff方法:
public static void main(String... args) {
myInterface myinterface = new B();
String str = myinterface.printOtherStuff(); // ? This does not work
}
上面的调用代码似乎不起作用。有什么想法吗?
最佳答案
myInterface myinterface = new B();
myinterface
的引用类型是myInterface
。这意味着您只能访问接口(interface)中定义的方法。您可以将其强制转换为类型 B
以进行方法调用。
注意:从现在开始,我将使用正确的命名约定。
示例
MyInterface myInterface = new B();
String str = ((B)myInterface).printOtherStuff();
只是对此做个说明
如果您需要这样做,那么您需要查看您的类设计。以这种方式使用interface
的想法是从对象具体实现的细节中抽象出来。如果您必须执行这样的显式转换,那么您可能需要考虑更改接口(interface)以容纳必要的方法,或者更改类以便将方法移至全局位置(如 util
文件或其他东西)。
额外阅读
你应该阅读引用类型 here , 你应该看看类型转换 here .我的答案是结合对这两件事的理解。
作为补充说明,请查看 Java Naming Conventions .对于任何 Java 开发人员要编写可理解的代码,这是一条重要的信息。
关于java - 从 Java 中实现的接口(interface)调用未在接口(interface)中定义的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21135843/