我有两个类A(超类)和B(子类),如下所示。我使用super()
关键字和参数来实例化超类的构造函数。但是,我正在寻找另一种优雅的方法,而不是在子类中列出超类的所有参数,因为当超类的属性数量巨大时,它会变得很长。
public class A {
private String a1;
private String a2;
private String a3;
public A (String a1, String a2, String a3){
this.a1 = a1;
this.a2 = a2;
this.a3 = a3;
}
public void setA1(String a1){
this.a1 = a1;
}
public String getA1(){
return a1;
}
...
}
public class B extends A{
private String b1;
private String b2;
private String b3;
public B (String b1, String b2, String b3, String a1, String a2, String a3){
super(a1,a2,a3);
this.b1 = b1;
this.b2 = b2;
this.b3 = b3;
}
public void setB1(String b1){
this.b1 = b1;
}
public String getB1(){
return b1;
}
...
}
答案 0 :(得分:5)
然而,我正在寻找另一种优雅的方法,而不是在子类中列出超类的所有参数,因为当超类的属性数量很大时它会变得很长。
嗯,优雅的方法是避免拥有一个巨大的"参数数量。如果您发现有大量参数,请考虑:
构造函数不是用Java继承的,而且使继承它们是无法实现的。
答案 1 :(得分:2)
另一种方法是使用Composition而不是Inheritance。这种方法有更多的好处,您可以阅读。但无论如何,它会是这样的:
Quagga.init({
inputStream : {
name : 'Live',
type : 'LiveStream',
target: document.querySelector('#barcode_canvas')
},
decoder : {
readers : ['ean_reader']
}
}, function(err) {
if (err) {
console.log(err);
return
}
console.log('Initialization finished. Ready to start');
Quagga.start();
});
您可能已经注意到此方法是可伸缩的,您可以将其扩展为更多参数。例如,您可以再采取此步骤,使其如下所示:
public class A {
private String a1;
private String a2;
private String a3;
public A (String a1, String a2, String a3){
this.a1 = a1;
this.a2 = a2;
this.a3 = a3;
}
...
}
public class B {
private A a;
private String b1;
private String b2;
private String b3;
public B (A a, String b1, String b2, String b3){
this.a = a;
this.b1 = b1;
this.b2 = b2;
this.b3 = b3;
}
...
}