【发布时间】:2018-08-10 18:05:19
【问题描述】:
我试图了解超类类型的变量如何将值存储在仅存在于子类中的数据成员中。
例如在 Java 中,假设类 Child 扩展了 Parent。 Child 有一个数据成员 childMember(假设它是一个 int)。
这在 Java 中是合法的:
Parent parentObject = new Child();
((Child)parentObject).childMember = 5;
但是parentObject 怎么能存储childMember 的值,因为它是Parent 类型,而Parent 没有childMember?我知道它被强制转换为设置值,但它甚至如何让数据成员能够存储它,因为它不是子对象?
【问题讨论】:
-
“因为它不是子对象?” 因为它是
new Child()。这与声明类型无关,而与实际实例类型有关。 -
它是一个子对象。你写了
new Child()。 -
那么即使它被声明为Parent类型,当它被分配为new Child()时它变成了Child?如果是这样,那我为什么必须将其转换为设置 childMember?
-
没有。变量
parentObject可以包含对 anyParent的引用。由于Child类扩展Parent,Child的实例也是Parents,parentObject可以包含对其中之一的引用。任务过程中没有任何变化。但是您在分配时需要强制转换,因为原则上parentObject也可以持有对Parent的引用,该引用不是Child:您断言当评估该表达式时,它实际上会引用一个Child。
标签: java subclass superclass