调用方法未在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