如何查看向下转换在Java中是否合法?

阿尤布·罗西(Ayoub Rossi):

假设我有A,B和C三个班级。

C扩展B,B扩展A。A实现接口InterfaceA B实现接口InterfaceB1和InterfaceB2。

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

我的意思是?

假设我们有:B b = new B(); 接口A i =(接口A)(A)(B)b。

我们如何才能容易地知道它是否可以编译以及是否会在没有IDE的情况下导致classcastException?

我知道对象和引用是如何工作的,并且对Java中的多态性有相当的了解。

我开始绘制类和接口结构的草图。

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

清扫器:

首先让我们处理“是否编译”。

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

通常,

  • 从编译时接口类型强制转换为接口类型总是会编译。
  • 如果满足以下任一条件,则仅从编译时接口类型强制转换为类:
    • 班级是非决赛
    • 该类实现接口
  • 如果满足以下任一条件,则仅从编译时类类型转换为接口类型:
    • 班级是非决赛
    • 该类实现接口
  • 从编译时类类型转换为另一类类型的方法只有在其中一个继承自另一个类的情况下才进行编译。

为了确定转换是否在运行时成功,关键是查看存储在变量中的对象的运行时类型。例如:

A a = new B();

的编译时间类型aA,但运行时类型为B

通常,仅当或实现继承时,才能从运行时类类型强制转换T为类或接口类型UTUU


对于未来的读者,

相反,如果您想知道如何使用代码检查强制类型转换是否成功,则应参考此问题

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章