在Java中,假设我有3个类,C从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);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我做了类似这样的事情,如上所示test():
C c = new C()
B b = (B) c;
f(b);
Run Code Online (Sandbox Code Playgroud)
f()从那时起接受b类型C,C并B从两者延伸A.我希望f()收到b类型B而不是类型C.
无论如何迫使这种向上倾斜?
f()将始终收到类似A的东西(尽管在封面下它实际上是B或C,并且可以适当地向下倾斜).
您可以定义一个额外的f()
f(B b);
Run Code Online (Sandbox Code Playgroud)
如果有必要的话
f(C c);
Run Code Online (Sandbox Code Playgroud)
并且将根据参数的类调用正确的一个.即编译器根据参数的类型确定调用哪个函数.这与运行时发生的动态调度(或多态)不同.
请注意,您在问题中的演员阵容是多余的.你可以写:
C c = new C()
B b = c;
f(b);
Run Code Online (Sandbox Code Playgroud)
由于C从B延伸,C 是 B.
| 归档时间: |
|
| 查看次数: |
5455 次 |
| 最近记录: |