我试图了解类型超类的变量如何将值存储在仅存在于子类中的数据成员中。

例如,在Java中,可以说类Child扩展了ParentChild有一个数据成员childMember(假设它是int)。

这在Java中是合法的:

Parent parentObject = new Child();((Child)parentObject).childMember = 5;

但是parentObject如何存储childMember的值,因为它的类型为Parent并且Parent没有childMember?我知道它正在强制设置该值,但是由于它不是子对象,它甚至还具有数据成员能够存储它的方式?

最佳答案

在此代码中:

Parent parentObject = new Child();
((Child)parentObject).childMember = 5;


parentObject对象的实际/运行时类是Child,这说明了为什么所有这些都起作用。


  但是parentObject如何存储childMember的值,因为它的类型为Parent,而parent没有childMember?


这个问题更适用于以下代码:

Parent parentObject = new Parent();
((Child)parentObject).childMember = 5;


但是,在这种情况下,强制转换((Child)parentObject)将不起作用,并且Java将在运行时引发一个ClassCastException,正如您所期望的那样。

关于java - 父类(super class)变量如何保存仅存在于子类中的数据成员值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51791889/

10-13 09:08