gpt4 book ai didi

java - 多态java思想

转载 作者:搜寻专家 更新时间:2023-11-01 01:34:22 25 4
gpt4 key购买 nike

考虑以下代码:

public class A{
private int num;
public A(int n){
num = n;
}
public int getNum(){
return num;
}
public boolean f(A a){
return num == a.num * 2;
}
}

public class B extends A {
public B(int n) {
super(n);
}

public boolean f(B b) {
return getNum() == b.getNum();
}
}

public class Main
{
public static void main(String[] args){
A y1 = new B(10);
B y2 = new B(10);
System.out.println("y1.f(y2) is: "+y1.f(y2));
}
}

我不明白的是为什么方法 f 正在为类 A 运行(并打印 false)而不是 B,因为在运行时 y1B 类型,应该转到 B 类中的方法 f 吗?

最佳答案

cause in run time y1 is of type B, and should go down to method f in class B?

否:

  • B.f() 不会覆盖 A.f() 因为参数类型不同。它重载了它。
  • 重载是在编译时选择的,而不是在执行时

如果您更改 B.f() 以接受类型为 A 而不是 B 的参数,您将看到它被执行。这不取决于参数的执行时类型,而是取决于调用的目标的执行时类型。

从不选择的方法实现取决于参数的执行时类型。

关于java - 多态java思想,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24651302/

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