gpt4 book ai didi

Java创建新对象

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:43:46 25 4
gpt4 key购买 nike

我有一个抽象类 Specie,然后是扩展物种的 Animals 类,然后是我的动物类(例如绵羊)。在 Animals 中,我有一个方法可以检查两个对象是否在 map 上的相同位置,以及它们是否属于同一类型(例如绵羊和绵羊)。

如果是,它会创建另一只羊。我对此有疑问我试过类似的东西

Specie new_specie = this;

我的 Sheep 类中有一个复制构造函数

     public Sheep(Sheep new_sheep){

this(new_sheep.get_x(),new_sheep.get_y(), new_sheep.get_img());
}

然后保存到包含所有对象的数组中

species[speciesAmount] = new_specie;

但它只是将同一个对象保存在一个数组的两个元素中

species[0]
species[2]

同一个对象。有什么想法吗?

但是还有一个问题,我会有更多种类的动物(eq.Wolf),我做不到

new Specie(this)

因为它是一个抽象类。

如何让它调用正确的构造函数?

编辑。我解决了它,我使用了 clone() 方法。

最佳答案

Specie new_specie = this; 将创建一个名为 new_specie 的新引用,并让它引用与 this 相同的对象。因此,species[speciesAmount] = new_specie; 会将相同的引用分配给数组条目(它本身就是一个引用)。

您的代码根本没有调用复制构造函数。与 C++ 不同,在 Java 中调用复制构造函数必须如下所示:

Specie new_specie = new Sheep(this);

顺便说一句,您可能想看看 Clonable 接口(interface),它旨在提供对象复制。

更新:关于您的第二个问题,解决方案取决于您想要实现的目标。如果您只想要一个字段中有两个具体物种的副本,您可以只比较两个物种的类(使用 getClass() 方法)或使用检查相等性equals()(取决于您如何定义它,它通常不仅仅是相等的类)。

然后您基本上只需调用 Species new_species = species_on_field.clone() 并获取之前该字段上的克隆。

另一种选择可能是使用工厂模式或基于该领域当前物种类别的原型(prototype)。不过,我会将这些留给您在网上查找。

关于Java创建新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30166224/

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