java - 未重写的公共(public)实例方法是否动态绑定(bind)?

标签 java dynamic binding static overriding

我有一个关于方法绑定(bind)的问题。如您所知,私有(private)、静态和 final方法的绑定(bind)发生在编译时,而重写方法的绑定(bind)发生在运行时。

下面,我们在Parent中有一个方法something(),该方法在相应的子类Child中没有被重写。

class Parent {
    void something() {
    }
}

class Child extends Parent {
}

public class Main {
    public static void main(String[] args) {
        Parent p = new Child();
        p.something(); // still dynamically bound?
    }
}

主程序中对p.something()的调用(尽管没有被覆盖)仍然是动态绑定(bind)的吗?

最佳答案

首先,方法签名是在编译时确定的。但是,方法绑定(bind)始终在运行时完成。运行时分派(dispatch)的确切规则在 JLS §15.12.2.5 中定义。 .

正如您现在可能猜测的那样,p.something(); 的调用仍然是动态有界的。

作为旁注,请查看 this清楚地理解多态性。

关于java - 未重写的公共(public)实例方法是否动态绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48117827/

相关文章:

java - 使用 ActionRequest Actionresponse 将参数从 java 类传递到 jsp

java - 没有 HTML 的带有换行符的 GWT 标签,这可能吗?

Java创建动态类

WPF:在带有效果的 ItemsControl 中显示和隐藏项目

binding - JavaFX 将 BooleanProperty 绑定(bind)到 Paint

c# - WPF 双向绑定(bind) XML

java - 无法在线程中运行 wait() 方法?

java - Youtube api v3 - 如何检索标记为垃圾邮件的评论(使用java)

sql - 使用 exec 命令切断动态 SQL 语句时出错

c++ - 大型动态多维数组不工作