[英]java subclass: multiple constructors inherited from abstract superclass
基本上,我有:
public abstract class AbstractClass {
public AbstractClass( Type arg0, Type arg1, Type arg2 ) {
// do some stuff with all those args
}
public AbstractClass( Type onlyOneArg ) {
// do different stuffs with this different arg.
}
protected someMethods() { /* ... */ }
}
我在子类中遇到了一些问题:
我当前子类的示例:
public class MyClass extends AbstractClass {
public MyClass( Type arg0, Type arg1, Type arg2 ) {
super( arg0, arg1, arg2 );
}
public MyClass( Type onlyOneArg ) {
super( onlyOneArg );
}
}
和
我可以做些什么吗? 有什么我不了解的Java吗? 还是我的设计不好? 要么.. ?
子类必须调用超类构造函数中的一个(或两者,如果你在例子中重新定义); 但你不能强迫它重新定义具有相同超类类签名的构造函数。
保证调用超类构造函数的唯一方法是在超类中只有一个构造函数。
我认为你应该想办法重新设计你的超类(可能创建2个类),如果你想要它总是被调用,只有一个构造函数。
但是,如果想要在子类中存在特定的构造函数,则应该在工厂中隔离“构造”问题; 您可以在其中为每个子类设置特殊工厂类。 您的工厂将实现此接口:
interface AbstractClassFactory {
AbstractClass create( Type arg0, Type arg1, Type arg2 );
AbstractClass create( Type onlyOneArg );
}
构造函数不是用Java继承的。 这有时候可能很烦人,但就是这样。 我不明白,为什么你希望每个子类都实现两个构造函数。 你写“在程序中,我用两个构造函数实例化,而不知道确切的类型”。 你是什么意思? 您无法实例化抽象类,您需要知道由“new”实例化的具体类型。 如果使用反射,则可以在运行时检查可用的构造函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.