为了账号安全,请及时绑定邮箱和手机立即绑定

超类变量如何保存仅存在于子类中的数据成员值?

超类变量如何保存仅存在于子类中的数据成员值?

www说 2021-07-05 17:39:34
我试图了解超类类型的变量如何将值存储在仅存在于子类中的数据成员中。例如在 Java 中,让我们说 class Childextends Parent。 Child有一个数据成员childMember(假设它是一个int)。这在 Java 中是合法的:Parent parentObject = new Child();((Child)parentObject).childMember = 5;但是如何parentObject存储一个值,childMember因为它是类型的Parent并且Parent没有childMember?我知道它正在被强制转换以设置值,但是它如何使数据成员能够存储它,因为它不是子对象?
查看完整描述

2 回答

?
米脂

TA贡献1836条经验 获得超3个赞

在这段代码中:


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在运行时引发 a ,正如您所期望的那样。


查看完整回答
反对 回复 2021-07-14
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

首先,引用是 type Parent,它指向的对象是 type Child,因此您的整个逻辑在另一个答案中详细说明。


但这是一个非常简单的例子,让我们做一个更有趣的例子:


static class Parent {

    public int x = 5;

}


static class Child extends Parent {

    public int x = 3;

}

有多少x的不Child呢?出色地...


Arrays.stream(Child.class.getFields())

            .map(Field::getName)

            .forEachOrdered(System.out::println); // x AND x again

那么你如何访问它们中的每一个?


Child c = new Child();

System.out.println(c.x); // 3


Parent p = c;

System.out.println(p.x); // 5


查看完整回答
反对 回复 2021-07-14
  • 2 回答
  • 0 关注
  • 111 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信