gpt4 book ai didi

java - 方法覆盖是否总是运行时多态性?

转载 作者:行者123 更新时间:2023-12-03 11:17:38 25 4
gpt4 key购买 nike

运行时多态性是否总是在方法覆盖时发生,还是只有在方法覆盖期间将子类对象分配给父类(super class)变量后调用方法才会发生?

class A {
public void myFunc() {
System.out.println("Something");
}
}

class B extends A {
public void myFunc() {
System.out.println("Something else");
}

public static void main (String args[]) {
A obj = new B();
obj.myFunc(); //Is only this call resolved at run time?

A obj2 = new A();
obj2.myFunc(); //Or is this call too resolved at run time?

B obj3 = new B();
obj3.myFunc(); //Is this call resolved at compile time?
}
}

最佳答案

在方法覆盖中,方法解析始终由 JVM 基于运行时对象负责。
是的,所有这些调用都会在运行时得到解决。

A obj = new B();
obj.myFunc();
  • 这里的引用变量属于 A 类,而对象属于 B 类。因此,B 类的 myFunc 方法将被调用
  • A obj2 = new A(); obj2.myFunc();
  • 这里引用变量属于 A 类,对象也属于 A 类。因此,A 类 myFunc 方法将被调用
  • B obj3 = new B(); obj3.myFunc();
  • 这里引用变量属于 B 类,对象也属于 B 类,因此,B 类 myFunc 方法将被调用
  • 关于java - 方法覆盖是否总是运行时多态性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52833627/

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