我有一个“动物”类和“动物”的一些子类(“猫”,“狗”等)。 Animal具有受保护的构造函数,所有子类均具有默认构造函数和copy构造函数。
在程序的某个点上,我有一个“动物”列表,我想将此列表深复制到另一个“动物”列表中(我的意思是不仅要复制列表本身,而且要深复制其中的所有对象) )。
为此,我编写了一个函数,您可以在其中传递列表以进行深层复制,它建立了列表中所有元素的循环,并通过使用复制构造函数将列表中所有元素添加到了新列表中。旧列表。
问题是,为了调用正确的副本构造函数,我必须通过if ... instanceof找出“动物”的类型。如果我没有'Animal'的子类,这不是一个大问题,但是我更愿意在'Animal'类中创建一些复制构造函数,这些构造函数根据传入的参数的类型调用正确的子类构造函数。 / p>
但是我在线阅读这不可能。这是真的?如果是这样,除了我正在使用的if ... instanceof方法之外,还有其他方法吗?
答案 0 :(得分:2)
您的方法是错误的。
好的OOP的整个想法是,超类对子类一无所知。 Oop即将能够添加更多的子类,而无需触摸代码的任何其他部分,包括父类。
在您的基类上有一个抽象方法deepCopy,并且让每个子类实现该方法。
这样您以后就可以在不知道动物特定分类的情况下克隆它们!