gpt4 book ai didi

java - 将父类(super class)的对象转换为子类的对象会创建一个新对象吗?

转载 作者:行者123 更新时间:2023-11-29 06:43:17 28 4
gpt4 key购买 nike

假设我有一个父类(super class) Item 和一个子类 MovingItem。

如果我创建了一个项目数组,然后尝试将其中一个已创建的项目转换为 MovingItem 并将其存储到一个 vector 中,这是否意味着我使用了一个引用或者我创建了一个新对象,例如。

Item[] itms = new Item[2];
itms[0] = new Item();
itms[1] = new Item();

Vector<MovingItem> movingItms = new Vector<MovingItem>();
movingItms.add((MovingItem) itms[0]);

当我转换在索引 0 处的数组 itms 中找到的 Itm 类型的对象,然后将其存储到 vector 中时会发生什么?我是存储引用还是强制转换创建类型为 MovingItem 的新对象,然后将其添加到 vector 中。

谢谢。

最佳答案

您的示例将抛出一个 ClassCastException。您只能将对象强制转换或分配给它的实际类型或其任何父类(super class)型,但不能转换或分配给它的子类型。

Item i = new MovingItem(); // ok, because a MovingItem is an Item
// a cast is possible, but redundant in this place
MovingItem mi = new Item(); // won't compile, an Item isn't a MovingItem
MovingItem mi = (MovingItem) new Item(); // throws ClassCastException
// an Item isn't a MovingItem

当然,转换一个对象并不会创建一个新对象,它只会创建一个新的引用(如果转换没有像上面那样因 ClassCastException 而失败)。

Object o = new Integer(5); // assign an Integer instance to an Object variable
Integer i = (Integer) o; // cast and assign to a new Integer variable
// still points the the same actual instance
assert i == o; // true, these two variables point to the same Integer instance

关于java - 将父类(super class)的对象转换为子类的对象会创建一个新对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9066218/

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