繁体   English   中英

Java 向上转换和向下转换以及继承

[英]Java upcasting and downcasting and inheritance

假设有一个超类和两个子类。

为什么 Java 不允许这种情况:

B -> A (A is superclass of class B)
C -> A
ObjectC c = (ObjectC)(ObjectA)b;

这样我就可以将公共属性从对象 b 映射到对象 c。

使用(ObjectA)b您有一个表达式,如果计算结果为 ObjectA (ObjectA ab = (ObjectA)b) 类型的引用。 实例化对象的实际类型(在内存中)不会改变,只有你持有它的句柄(引用)会改变。 您不能将该引用转换为ObjectC ,因为基础对象实例(最初为 b)的类型为ObjectB

假设我们允许您在问题ObjectC c = (ObjectC)(ObjectA)b所写的内容。 如果你评估你会得到一个 ObjectC 类型的引用到实例化的对象 b。 假设 ObjectC 有一个名为 run() 的方法,但当然,ObjectB 不必有 run() 方法。 当你调用c.run()会发生什么?

如果要将公共属性从对象 b 映射到对象 c,则必须使用它们的公共基类并将公共属性放在那里。

编辑有更好的解释。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM