gpt4 book ai didi

java - 实例方法是否曾经使用静态绑定(bind)解析?

转载 作者:行者123 更新时间:2023-12-01 12:55:24 24 4
gpt4 key购买 nike

在我关于静态绑定(bind)的讲义中,它给出了一个使用实例方法的例子。
例子:
动物类有方法:

void dumb() {int x = 0;}
然后
Animal doudi = new Animal(); 
doudi.dumb();
编译器可以直接插入正文 {int x = 0;}但是,据我了解,这不是静态方法,那么为什么使用静态绑定(bind)而不是动态绑定(bind)呢?
此外,在 this website ,它说实例方法是使用动态绑定(bind)解决的。
这里的例子不是实例方法吗?

最佳答案

要回答标题中的问题,是的,动态绑定(bind)并不总是应用于实例方法。
有 3 种情况在调用方法时不会发生动态绑定(bind),即方法是:

  • final - 因为它不能在子类型中被覆盖,所以编译器确定在运行时需要执行哪个方法体
  • private - 因为私有(private)方法不是继承的,我们不能覆盖它们。子类型可以用相同的名称和参数类型(签名)重新声明自己的方法,但这不会被视为覆盖(您不能在子类型中添加 @Override 注释到此类方法而不会出现编译错误;您可以更改其返回类型,例如实例从 intvoid )
  • static - 因为它是在类而不是实例上调用的(但这不是问题的主题。简而言之,即使你写 someAnimal.staticMethod() 编译器也会看到它就像你写 Animal.staticMethod() 一样)

  • ... so why is it using static binding as opposed to dynamic binding


    它不是。在您调用 doudi.dumb(); 时编译器看到 dumb()不是 final , private也不是 static因此它将受到多态性的影响(因此是动态绑定(bind))。

    关于java - 实例方法是否曾经使用静态绑定(bind)解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62826038/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com