gpt4 book ai didi

Java Child 在 Parent 数组中引用类型

转载 作者:行者123 更新时间:2023-12-02 02:00:26 24 4
gpt4 key购买 nike

对于以下问题,

假设在单元格中引用的对象

ArrayList<Polygon> pentagonGroup

是五角大楼类型。如果您稍后引用该对象,它将具有什么类型?

答案是什么?

我尝试在 IDE 中尝试,在执行以下操作时,即使将子对象放入父列表中,似乎也会将其识别为子对象。

Child c = new Child();
ArrayList<Parent> pa = new ArrayList<Parent>();
pa.add(c);
Class cls = pa.get(0).getClass();
System.out.println(cls.getName());

当人们无法使用子对象特定的方法而不将其向下转换回子对象时,这似乎有点奇怪。

System.out.println(pa.get(0).getChildMessage()); // invalid
System.out.println(((Child)pa.get(0)).getChildMessage()); // valid

根据我的结果,第一个问题的答案是(五角大楼)。这是正确的吗?

编辑:

所以我实际上仍然不确定上面提出的第一个问题;答案是多边形还是五角大楼?

最佳答案

运行时可以获取pa.get(0)的类型:

Class cls = pa.get(0).getClass();
System.out.println(cls.getName());

在编译阶段,编译器只知道pa.get(0)Parent,所以你不能调用pa.get(0)。 getChildMessage() 无需向下转换。这是为了类型安全。

事实上,您可以将任何对象转换为 Child 来使其编译,

Object o = new Object();
System.out.println(o.getChildMessage());

但它会在运行时抛出强制转换异常。

关于Java Child 在 Parent 数组中引用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51657727/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com