如何强制在抽象类的所有子类中定义构造函数
我有一个定义抽象方法的抽象类A。这意味着,要使一个类变得可实例化,必须实现所有抽象方法。
我希望所有子类都以2个整数作为参数实现一个构造函数。
声明构造函数违反了我的目的,因为我希望在子类中定义构造函数,而我对实现一无所知。而且,我不能将构造函数声明为抽象的。
有没有办法做到这一点 ?
可以说我正在定义Matrix类的API。在我的问题中,Matrix无法更改其尺寸。
对于要创建的矩阵,我需要提供其大小。
因此,我希望我的所有实现者都向构造函数提供大小作为参数。该构造函数的目的是问题,而不是实现方面的问题。只要保留方法的所有语义,该实现就可以使用它们执行任何操作。
假设我想invert()
在我的抽象类中提供该方法的基本实现。此方法将创建一个this
尺寸倒置的新矩阵。更具体地说,正如在抽象类中定义的那样,它将this
使用需要两个int的构造函数来创建与相同的类的新实例。因为它不知道实例,所以它将使用反射(getDefinedConstructor),并且我想要一种方法来保证我将得到它,并且它将对实现有意义。
回答:
您不能在子类中强制使用构造函数的特定签名-但 可以 强制它通过抽象类中的构造函数并使用两个整数。子类 可以
从无参数构造函数中调用该构造函数,例如,传入常量。那是您可以找到的最接近的。
此外,正如您所说,您对实现一无所知-
那么您如何知道让他们拥有需要两个整数的构造函数是合适的呢?如果其中之一也需要字符串怎么办?或者对于这些整数之一使用常量可能很有意义。
这里的全局是什么- 为什么 要在子类上强制使用特定的构造函数签名?(正如我所说,您实际上无法 做到 这一点,但是如果您解释了为什么 要这样做
,则可能会提出解决方案。)
一种选择是为工厂提供单独的接口:
interface MyClassFactory{
MyClass newInstance(int x, int y);
}
然后,您的每个具体子类MyClass
还需要一个工厂,该工厂知道如何在给定两个整数的情况下构建实例。但是,这并不十分方便-
而且您仍然需要构建工厂本身的实例。同样,这里的真实情况是什么?
以上是 如何强制在抽象类的所有子类中定义构造函数 的全部内容, 来源链接: utcz.com/qa/400124.html