是否可能出现以下情况:
创建一个名为Animal
的AnimalPool
对象池。
从Animal
分配myAnimal
对象(称为AnimalPool
)
将myAnimal
强制转换为Cat
设置特定于Cat
的字段
将myAnimal
存储到Animal
的数组中(假设从索引0开始)
稍后访问数组,并将索引0强制转换为Cat
并检查我在4中设置的字段。
最佳答案
我认为您可以做您想做的事情,只是不完全按照您的想法去做。您的AnimalPool本质上将是动物的“工厂”(查找工厂模式,可能有帮助,但这在这里不是重要的部分。),并且还可以作为“动物”的集合。制作一个“动物”对象,该对象具有所有动物共有的所有方法和属性。然后制作所需的动物,例如“猫”和“狗”,并从“动物”的基类中派生它们。然后,在“ AnimalPool”中,添加函数以创建和返回特定类型的Animal,例如getDog()和getCat(),或者使用参数创建一个函数。使用AnimalPool工厂创建该特定类型,由于它是从“动物”派生的,因此可以将其添加到“动物”类型的列表中。从AnimalPool列表中检索Animals时,可以将它们转换为适当的类型。根据您语言的反射能力,您甚至可以使该对象告诉您它是什么类型。
这只是使用继承和工厂模式的简单情况。仔细看这两件事,我想您会在轻松的道路上实现自己的目标。祝您好运,希望对您有所帮助。如果需要,我可以给您一个代码示例。 :-)