gpt4 book ai didi

java - 在 Java 中向上转型

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:31:57 25 4
gpt4 key购买 nike

在 Java 中,假设我有 3 个类,C 扩展自 B,B 扩展自 A。

class X {
interface A {}
interface B extends A {}
interface C extends B {}
void f(A a) {}

void test() {
C c = new C()
B b = (B) c;

f(b);
}
}

如果我像上面的 test() 中那样做这样的事情:

C c = new C()
B b = (B) c;

f(b);

f() 接受 b 作为 C 类型,因为 CB都从 A 扩展而来。我希望 f() 接收 b 作为类型 B 而不是类型 C

有没有办法强制进行这种向上转换?

最佳答案

f()总是接收类型为 A 的内容(尽管在幕后它实际上是 B 或 C,并且可以适本地向下转换)。

你可以这样定义一个额外的 f()

f(B b);

如有必要

f(C c);

正确的将根据参数的类别被调用。即编译器根据参数的类型确定调用哪个函数。这不同于在运行时发生的动态分派(dispatch)(或多态性)。

请注意,您在问题中的转换是多余的。你可以这样写:

C c = new C()
B b = c;

f(b);

因为 C 从 B 扩展而来,所以 C 是一个 B。

关于java - 在 Java 中向上转型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/817373/

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