gpt4 book ai didi

java - 如何判断向下转型在 Java 中是否合法?

转载 作者:行者123 更新时间:2023-11-30 12:08:37 25 4
gpt4 key购买 nike

假设我有三个类 A、B 和 C。

C 扩展 B,B 扩展 A。A 实现接口(interface) InterfaceAB 实现接口(interface) InterfaceB1 和 InterfaceB2。

找到所有可能的向下转型组合的最佳方法是什么?

我的意思是?

假设我们有:B b = 新 B();InterfaceA i = (InterfaceA)(A)(B) b.

在没有 IDE 的情况下,我们如何轻松地知道这是否编译以及是否会导致 classcastException?

我知道对象和引用的工作原理,并且对 Java 中的多态性有一定的了解。

我开始画类和接口(interface)结构的草图。

编辑:我知道我的例子不正确,但当界面加入故事时我总是很挣扎。

最佳答案

先说“能不能编译”。

确定这一点的关键是查看编译时类型,即变量的声明类型。

一般来说,

  • 从编译时接口(interface)类型转换为接口(interface)类型总是可以编译的。
  • 从编译时接口(interface)类型到类的转换只有在满足以下任一条件时才能编译:
    • 类(class)是非最终的
    • 该类实现接口(interface)
  • 从编译时类类型到接口(interface)类型的转换只有在满足以下任一条件时才能编译:
    • 类(class)是非最终的
    • 该类实现接口(interface)
  • 从一个编译时类类型转换为另一个类类型只有在其中一个类继承自另一个类时才能编译。

要判断运行时是否转换成功,关键是看变量中存储的对象的运行时类型。例如:

A a = new B();

a的编译时类型是A,但是运行时类型是B

通常,从运行时类类型 T 转换为类或接口(interface)类型 U 仅当 T 继承自 U< 时才会成功 或实现 U


对于 future 的读者,

相反,如果您想知道如何使用代码检查转换是否成功,您应该引用此 question .

关于java - 如何判断向下转型在 Java 中是否合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54276592/

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