假设我有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();
的编译时间类型a
为A
,但运行时类型为B
。
通常,仅当从或实现继承时,才能从运行时类类型强制转换T
为类或接口类型。U
T
U
U
对于未来的读者,
相反,如果您想知道如何使用代码检查强制类型转换是否成功,则应参考此问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句