如何强制在抽象类的所有子类中定义构造函数

我有一个定义抽象方法的抽象类A。这意味着,要使一个类变得可实例化,必须实现所有抽象方法。

我希望所有子类都以2个整数作为参数实现一个构造函数

声明构造函数违反了我的目的,因为我希望在子类中定义构造函数,而我对实现一无所知。而且,我不能将构造函数声明为抽象的。

有没有办法做到这一点 ?

可以说我正在定义Matrix类的API。在我的问题中,Matrix无法更改其尺寸。

对于要创建的矩阵,我需要提供其大小。

因此,我希望我的所有实现者都向构造函数提供大小作为参数。该构造函数的目的是问题,而不是实现方面的问题。只要保留方法的所有语义,该实现就可以使用它们执行任何操作。

假设我想invert()在我的抽象类中提供该方法的基本实现。此方法将创建一个this尺寸倒置的新矩阵。更具体地说,正如在抽象类中定义的那样,它将this使用需要两个int的构造函数来创建与相同的类的新实例。因为它不知道实例,所以它将使用反射(getDefinedConstructor),并且我想要一种方法来保证我将得到它,并且它将对实现有意义。

回答:

您不能在子类中强制使用构造函数的特定签名-但 可以 强制它通过抽象类中的构造函数并使用两个整数。子类 可以

从无参数构造函数中调用该构造函数,例如,传入常量。那是您可以找到的最接近的。

此外,正如您所说,您对实现一无所知-

那么您如何知道让他们拥有需要两个整数的构造函数是合适的呢?如果其中之一也需要字符串怎么办?或者对于这些整数之一使用常量可能很有意义。

这里的全局是什么- 为什么 要在子类上强制使用特定的构造函数签名?(正如我所说,您实际上无法 做到 这一点,但是如果您解释了为什么 要这样做

,则可能会提出解决方案。)

一种选择是为工厂提供单独的接口:

interface MyClassFactory

{

MyClass newInstance(int x, int y);

}

然后,您的每个具体子类MyClass还需要一个工厂,该工厂知道如何在给定两个整数的情况下构建实例。但是,这并不十分方便-

而且您仍然需要构建工厂本身的实例。同样,这里的真实情况是什么?

以上是 如何强制在抽象类的所有子类中定义构造函数 的全部内容, 来源链接: utcz.com/qa/400124.html

回到顶部