java - 为什么动态类型方法不可见?

标签 java

假设我们有:

interface A{
    void foo();
}

class B implements A{
    void foo(){}
    void doNothing(){}
}

我创建一个B实例

 A object=new B();

为什么在调用 object.doNothing() 时会引发编译错误?

最佳答案

因为,在编译时,Compilter 检查引用类型方法绑定(bind)。所以 doNothing() 方法在接口(interface) A

中不可用

在编译时,编译器无法确定在这些引用上对方法 doNothing() 的调用实际上指的是方法的哪个版本——父类(super class)版本还是子类版本.

关于java - 为什么动态类型方法不可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27794826/

相关文章:

java - 是否曾在运行中的 JVM 中调用过此方法

java - 如何使用 Selenium 和 Java 处理浏览器登录弹出窗口

java - 防止屏幕方向更改后服务过度窗口旋转

java - Android Studio 无法解析 fragmentActivity 和 ViewPager 导入

java - MS DOS 命令或 Java 代码将文件目录从一个驱动器复制到多个驱动器?

java - 我们可以在没有 hibernate 的情况下使用jpa吗

java - JPA 和 derby 空指针异常

java - 模拟 Apache Camel 在 JUnit 测试中的位置

java - 如何在免费 Oracle 云上安装 JServer

Java - JoptionPane.ShowConfirmDialog 中的自定义图像不起作用