gpt4 book ai didi

java - 本例中多态性背后的逻辑 :

转载 作者:行者123 更新时间:2023-11-30 06:19:57 25 4
gpt4 key购买 nike

class Base {
public static void staticMethod(Base bObj) {
System.out.println("In Base.staticMethod()");
bObj.instanceMethod();
}
public void instanceMethod() {
System.out.println("In Base.instanceMethod()");
}
}
class Derived extends Base {
public static void staticMethod(Base bObj) {
System.out.println("In Derived.staticMethod()");
bObj.instanceMethod();
}
public void instanceMethod() {
System.out.println("In Derived.instanceMethod()");
}
}
public class Main {
public static void main(String []args) {
Base bObj = new Derived();
bObj.staticMethod(bObj);
}
}

最初,当我看到这个例子时,我确信结果会是:

"In Base.staticMethod()"
"In Base.instanceMethod()".

第一个Derived对象初始化后,很明显,由于upcast,它会被解释为Base对象,并且会调用base的静态方法它执行的类,但稍后当它调用其他方法(实例方法)时,它会进入派生函数而不是基类。

为什么,考虑到最初它被认为是Base

最佳答案

静态方法没有方法重写。因此,bObj.staticMethod()(相当于Base.staticMethod)调用基类的静态方法。

在静态方法内,您正在调用bObj.instanceMethod()。对于实例方法,存在方法重写,bObj 的运行时类型决定执行哪个方法 - 在您的情况下是 Derived 的实例方法。

关于java - 本例中多态性背后的逻辑 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48369569/

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