gpt4 book ai didi

java - 类层次结构中方法调用的练习

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

我正在尝试解决一个关于Java中方法调用的问题,这个问题看起来很奇怪,我希望有人可以帮助解决这个问题。这是三个类的代码,A是顶层类,C继承自A,D继承自C。

class A {
int f(double x) {
return 1;
}

int f(boolean x) {
return 2;
}
}

class C extends A {
int f(double x) {
return 3;
}

int f(int x) {
return 4;
}
}

class D extends C {
int f(double x) {
return 5;
}

int f(int x) {
return 6;
}

}

public class test {
public static void main(String[] args) {
C b = new D();
A d = new D();

System.out.println(b.f(33));
System.out.println(d.f(33));
}
}

当我用 int 调用对象 b 的方法时,我得到 6,这意味着调用了类 D 中的方法 f(int x)。但是当我在对象 d 上调用相同的方法时,我得到 5,这意味着调用了类 D 中的方法 f(double x) 。为什么它会这样?为什么整数在一种情况下被视为整数,而在另一种情况下被视为 double ?这与我声明两个对象的方式有关,但我无法获取它。

最佳答案

区别在于对象的类型。 b的引用类型为Cd的引用类型为A 。在继承的情况下,JVM 在运行时绑定(bind)方法,这意味着您只能调用引用类型的方法,但重写的方法将运行。

当您在 d 上调用该函数时,JVM 自动转换为 double因为A int 没有相应的方法争论。然后,该方法逐渐下降到 D因为该对象是 D 的实例,但它仍然以 double 的形式流下来。 .

关于java - 类层次结构中方法调用的练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41578168/

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