java - 从 Java 中实现的接口(interface)调用未在接口(interface)中定义的方法

标签 java interface

我在 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/

相关文章:

java - 查找到所选点特定距离内的所有地址的最佳方法是什么

java - 接口(interface)方法Java中的泛型

interface - 鸭子类型(duck typing)与旧的 'variant' 类型和/或接口(interface)有何不同?

java - Android,我如何在 Controller 中使用 hellper 方法的回调?

java - 在 JToolBar 中添加垂直分隔符

java - 2D 数组游戏板...NullPointerException

java - Set 中的 Get 和 Set 方法

data-structures - 我应该如何正确实现核心 Clojure 接口(interface)?

java - vertx访问verticle类之外的事件总线

java - 查找两个 2 TSV 文件之间的唯一元素