从超类的构造函数调用子类的构造函数

Calling constructor of subclass from constructor of superclass

我有一个 class 'Animal' 和 'Animal' 的一些子 class('Cat'、'Dog'、...) . Animal 有一个受保护的构造函数,所有 subclasses 都有一个默认构造函数和一个复制构造函数。

在程序的某个时刻,我有一个 'Animal' 的列表,我想将这个列表深复制到另一个 'Animal' 列表中(我的意思是不仅深复制列表本身,而且还有其中的所有对象)。

为此,我编写了一个函数,您可以在其中将列表传递给深度复制,它会为列表的所有元素设置一个循环,并通过使用复制构造函数将所有元素添加到新列表中旧列表的。

问题是为了调用正确的复制构造函数,我必须通过 if...instanceof 找出 'Animal' 的类型。如果 'Animal' 的子 class 很少,这不是什么大问题,但我更愿意在 'Animal' class 中创建一些复制构造函数,它调用正确的subclass 构造函数基于我传入的参数类型。

但是我在网上看到这是不可能的。这是真的?如果是这样,除了我正在使用的 if...instanceof 方法之外,还有其他方法吗?

你的做法是错误的。

好的 OOP 的整体思想是超级class 对 child classes 一无所知。 Oop 是关于能够添加更多 child classes 而无需触及代码的任何其他部分,包括 parent class。

而是在你的基础上有一个抽象方法 deepCopy class 并让每个 child class 实现它。

这样您以后就可以在不知道具体动物的情况下克隆动物 class!