我有一个定义抽象方法的抽象类 A。这意味着,要使类可实例化,必须实现所有抽象方法。
我希望我的所有子类都实现一个以 2 个整数作为参数的构造函数。
声明构造函数违背了我的目的,因为我希望在子类中定义构造函数,并且我对实现一无所知。此外,我不能将构造函数声明为抽象的;
有没有办法做到这一点 ?
我想要的示例:
假设我正在定义 Matrix 类的 API。在我的问题中,矩阵无法改变它们的尺寸。
为了创建矩阵,我需要提供其大小。
因此,我希望所有实现者都向构造函数提供大小作为参数。这个构造函数是由问题驱动的,而不是由实现问题驱动的。只要保留方法的所有语义,实现就可以对它们做任何想做的事情。
假设我想提供一个基本的实现invert()
我的抽象类中的方法。该方法将创建一个新矩阵this
倒置的尺寸。更具体地说,正如它在抽象类中定义的那样,它将创建与以下内容相同的类的新实例this
,使用带有两个整数的构造函数。由于它不知道它将使用反射(getDefinedConstructor)的实例,并且我想要一种方法来保证我会得到它并且它将对于实现有意义。
你不能在你的子类中强制构造函数的特定签名 - 但你can强制它通过抽象类中带有两个整数的构造函数。子类could例如,从无参数构造函数调用该构造函数,传入常量。但这是你能达到的最接近的结果。
此外,正如您所说,您对实现一无所知 - 那么您如何知道它们适合拥有一个需要两个整数的构造函数?如果其中一个也需要字符串怎么办?或者对这些整数之一使用常量可能是有意义的。
这里的大局是什么-why您想在子类上强制使用特定的构造函数签名吗? (正如我所说,你实际上不能do这个,但如果你解释为什么你想要它,一个解决方案可能会出现。)
一种选择是为工厂提供单独的接口:
interface MyClassFactory
{
MyClass newInstance(int x, int y);
}
然后你的每个具体子类MyClass
还需要一个知道如何构建给定两个整数的实例的工厂。但这并不是很方便 - 而且您仍然需要构建工厂本身的实例。话又说回来,这里的真实情况是怎样的?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)