调用方法未在Java中实现的接口的接口中定义

时间:2014-01-15 11:11:11

标签: java

我在Java中有以下场景。假设我有一个接口,以及两个实现此接口的类。如下:

  

public interface 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
}

上面的调用代码似乎不起作用。有什么想法吗?

2 个答案:

答案 0 :(得分:17)

myInterface myinterface = new B();

myinterface的引用类型为myInterface。这意味着您只能访问界面中定义的方法。您可以将其强制转换为B,以便进行方法调用。

注意 :从现在开始,我将使用正确的命名约定。

示例

MyInterface myInterface = new B();

String str = ((B)myInterface).printOtherStuff();

只需注意

如果您需要这样做,那么您需要查看您的课堂设计。以这种方式使用interface的想法是抽象出对象具体实现的细节。如果您必须执行这样的显式转换,那么您可能需要查看更改接口以适应必要的方法,或者更改类以便将方法移动到全局位置(如{{1}文件或其他东西)。

额外阅读

您应该阅读有关引用类型here的内容,您应该看一下转换here。我的答案是对这两方面的理解的结合。

作为补充说明,请查看Java Naming Conventions。对于任何Java开发人员来说,这都是制作可理解代码的重要信息。

答案 1 :(得分:1)

当然,这不起作用,因为您的引用类型为Interface MyInterface。在方法绑定时,编译器会尝试在Interface MyInterface中找到此方法,该方法不可用。所以你需要像这样把它投射到你的班级。

    MyInterface myInterface = new B();
    B newB=(B) myInterface ;//casting to class
    newB.printOtherStuff();// would work fine