use*_*548 5 java inheritance constructor abstract-class
基本上,我有:
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() { /* ... */ }
}
Run Code Online (Sandbox Code Playgroud)
我在子类中遇到了一些问题:
我当前子类的示例:
public class MyClass extends AbstractClass {
public MyClass( Type arg0, Type arg1, Type arg2 ) {
super( arg0, arg1, arg2 );
}
public MyClass( Type onlyOneArg ) {
super( onlyOneArg );
}
}
Run Code Online (Sandbox Code Playgroud)
和
我可以做些什么吗?有什么我不了解的Java吗?还是我的设计不好?要么.. ?
子类必须调用超类构造函数之一(或两者,如果您像示例中那样重新定义两者);但你不能强迫它使用与超类相同的签名重新定义构造函数。
保证超类构造函数被调用的唯一方法是超类中只有一个构造函数。
我认为你应该考虑一种方法来重新设计你的超类(也许创建 2 个类),以便只有一个构造函数(如果你希望它始终被调用)。
但是,如果希望子类中存在特定的构造函数,则应该在工厂中隔离“构造”问题;您可以在其中为每个子类设置特殊的工厂类。你的工厂将实现这个接口:
interface AbstractClassFactory {
AbstractClass create( Type arg0, Type arg1, Type arg2 );
AbstractClass create( Type onlyOneArg );
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5754 次 |
最近记录: |