Java:具有继承参数的子类构造函数

Java:具有继承参数的子类构造函数,java,inheritance,constructor,arguments,Java,Inheritance,Constructor,Arguments,我有一个用于3个具体类的抽象基类。 假设基类的构造函数有2个参数。每个子类的构造函数接受这两个参数加上一个或两个附加参数,并将这两个必要的参数传递给超类构造函数。比如: public abstract class SuperClass { public long field1; private SomeType field2; public SuperClass(long field1, SomeType field2) { this.field1 =

我有一个用于3个具体类的抽象基类。
假设基类的构造函数有2个参数。每个子类的构造函数接受这两个参数加上一个或两个附加参数,并将这两个必要的参数传递给超类构造函数。比如:

public abstract class SuperClass {
    public long field1;
    private SomeType field2;

    public SuperClass(long field1, SomeType field2) {
        this.field1 = field1;
        this.field2 = field2;
    }
    ...
}

public class SubClass extends SuperClass {
    private String sometext;

    public SubClass(long field1, SomeType field2, String sometext) {
        super(field1, field2);
        this.sometext = sometext;
    }
    ...
}
我想这还不错。但是,如果以后某个时候我决定需要更改
超类
的构造函数(例如,它需要一个新字段的附加参数),我也不想编辑子类

因此,我正在寻找一种优雅的方法,告诉
子类
构造函数“获取
super()
所需的参数并将其传递给它,同时获取
字符串sometext
并对其进行处理”。所以在伪代码中:

public class SubClass extends SuperClass {
    private String sometext;

    public SubClass(paramlist:super(), String sometext) {
        super(paramlist:super());
        this.sometext = sometext;
    }
    ...
}
这样我就可以更改
超类
定义和实例化
子类
的代码,而不用担心
子类
本身

我已经研究过可能的解决方案,比如使用专用对象将参数捆绑在一起,使用构建器,甚至将
超类
具体化,并将其实例传递给
子类
构造函数,然后乏味地复制字段。我认为这些解决方案中的任何一个都不适合我,因为它们都增加了代码的复杂性,而不是降低代码的复杂性


有没有一种相对简单的方法可以做到这一点,其复杂性与上面列出的伪代码类似?我是否可能遗漏了一个非常明显的事实,它阻止了这件事的发生?

没有真正的方法来实现你想要的。我的建议是获得一个优秀的IDE,它将为您完成工作。在大多数主流IDE、Eclispe和Intellij中重构签名时,如果在程序中使用正确的功能,它们也会编辑子类。正如你所说的,通过将参数绑定到数组或包装类中来实现你自己的解决方案。我认为你列出了最好的选择:将所有参数绑定到一个单独的类中的超级构造函数,或者跳过普通构造函数,改为使用生成器。哇,这太快了。是的,我完全可以使用IDE的功能。感谢您提醒我——正如您所看到的,我在Java中仍然是一个noob;)我觉得可能没有这样的语言结构,但我还是发了帖子,想看看是否真的有这样的方法,或者有人能解释为什么没有。无论如何,谢谢你的快速回复!您可以使用组合而不是继承,请参阅本文:这是解决此问题的另一种可能方法。谢谢你提出来。但是,我担心这会增加我的代码的复杂性(在前面提到的解决方案中),因为我的类在“is a”上相互继承basis和我使用对
超类
的引用来简化对各种
子类
对象的操作,并使集合具有通用性。没有真正的方法来实现您想要的。我的建议是获得一个优秀的IDE,它将为您完成工作。在大多数主流IDE、Eclispe和Intellij中重构签名时,如果在程序中使用正确的功能,它们也会编辑子类。正如你所说的,通过将参数绑定到数组或包装类中来实现你自己的解决方案。我认为你列出了最好的选择:将所有参数绑定到一个单独的类中的超级构造函数,或者跳过普通构造函数,改为使用生成器。哇,这太快了。是的,我完全可以使用IDE的功能。感谢您提醒我——正如您所看到的,我在Java中仍然是一个noob;)我觉得可能没有这样的语言结构,但我还是发了帖子,想看看是否真的有这样的方法,或者有人能解释为什么没有。无论如何,谢谢你的快速回复!您可以使用组合而不是继承,请参阅本文:这是解决此问题的另一种可能方法。谢谢你提出来。但是,我担心这会增加我的代码的复杂性(在前面提到的解决方案中),因为我的类在“是”的基础上相互继承,我使用对
超类的引用来简化对所有类型的
子类
对象的操作,并使集合具有通用性。