猿问

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

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


例如在 Java 中,让我们说 class Childextends Parent。 Child有一个数据成员childMember(假设它是一个int)。


这在 Java 中是合法的:


Parent parentObject = new Child();

((Child)parentObject).childMember = 5;


但是如何parentObject存储一个值,childMember因为它是类型的Parent并且Parent没有childMember?我知道它正在被强制转换以设置值,但是它如何使数据成员能够存储它,因为它不是子对象?


www说
浏览 112回答 2
2回答

米脂

在这段代码中: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 ,正如您所期望的那样。

繁星点点滴滴

首先,引用是 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); // 3Parent p = c;System.out.println(p.x); // 5
随时随地看视频慕课网APP

相关分类

Java
我要回答