基本上,我有:
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有什么不了解的地方吗?还是我的设计不好?或者.. ?
最佳答案
子类必须调用一个父类(super class)构造函数中的一个(或者,如果您按照示例中的定义重新定义,则两者都调用);但是您不能强制它重新定义具有父类(super class)相同签名的构造函数。
确保调用父类(super class)构造函数的唯一方法是在父类(super class)中只有一个构造函数。
我认为您应该考虑一种重新设计您的父类(super class)(也许创建2个类)的方法,如果您希望始终调用它,则仅具有一个构造函数。
但是,如果希望特定的构造函数出现在子类中,则应隔离工厂中的“构造”问题;您可以在其中为每个子类都有特殊的工厂类。您的工厂将实现此接口(interface):
interface AbstractClassFactory {
AbstractClass create( Type arg0, Type arg1, Type arg2 );
AbstractClass create( Type onlyOneArg );
}