java子类:从抽象超类继承的多个构造函数

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吗?还是我的设计不好?要么.. ?

Jor*_*dão 2

子类必须调用超类构造函数之一(或两者,如果您像示例中那样重新定义两者);但你不能强迫它使用与超类相同的签名重新定义构造函数。

保证超类构造函数被调用的唯一方法是超类中只有一个构造函数。

我认为你应该考虑一种方法来重新设计你的超类(也许创建 2 个类),以便只有一个构造函数(如果你希望它始终被调用)。

但是,如果希望子类中存在特定的构造函数,则应该在工厂中隔离“构造”问题;您可以在其中为每个子类设置特殊的工厂类。你的工厂将实现这个接口:

interface AbstractClassFactory {
  AbstractClass create( Type arg0, Type arg1, Type arg2 );
  AbstractClass create( Type onlyOneArg );
}
Run Code Online (Sandbox Code Playgroud)