Java:具有继承参数的子类构造函数
我有一个用于3个具体类的抽象基类。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 =
假设基类的构造函数有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;)我觉得可能没有这样的语言结构,但我还是发了帖子,想看看是否真的有这样的方法,或者有人能解释为什么没有。无论如何,谢谢你的快速回复!您可以使用组合而不是继承,请参阅本文:这是解决此问题的另一种可能方法。谢谢你提出来。但是,我担心这会增加我的代码的复杂性(在前面提到的解决方案中),因为我的类在“是”的基础上相互继承,我使用对超类的引用来简化对所有类型的子类
对象的操作,并使集合具有通用性。