代码之家  ›  专栏  ›  技术社区  ›  Lapo pfalcon

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

  •  1
  • Lapo pfalcon  · 技术社区  · 7 年前

    我有一个“动物”类和一些“动物”的子类(“猫”、“狗”…)。Animal有一个受保护的构造函数,所有子类都有一个默认构造函数和一个复制构造函数。

    在程序中的某个时刻,我有一个“动物”列表,我想将这个列表深入复制到另一个“动物”列表中(我的意思是不仅要深入复制列表本身,还要深入复制其中的所有对象)。

    为此,我编写了一个函数,在该函数中将列表传递给deep copy,它将设置列表中所有元素的循环,并通过使用copy构造函数将旧列表中的所有元素添加到新列表中。

    问题是,为了调用正确的复制构造函数,我必须通过if。。。实例。如果我有几个“Animal”的子类,这不是什么大问题,但我更愿意在“Animal”类中创建一些复制构造函数,这些构造函数根据我传入的参数类型调用正确的子类构造函数。

    但我在网上看到这是不可能的。这是真的吗?如果是的话,除了如果。。。我正在使用的方法的实例?

    1 回复  |  直到 7 年前
        1
  •  2
  •   GhostCat    7 年前

    你的方法是错误的。

    好的OOP的全部思想是,超类对子类一无所知。Oop是指能够添加更多的子类,而无需接触代码的任何其他部分,包括父类。

    而是在基类上有一个抽象方法deepCopy,并让每个子类实现它。