Also lassen Sie uns sagen, dass ich Klasse A, die wie folgt definiert ist:Wie werden Standardwerte in einer Vererbungskette behandelt, ohne doppelten Code zu schreiben?
public class A{
private int x;
public A(){
this(13);
}
public A(int x){
this.x = x;
}
}
Und ich habe dann eine Klasse B, die y implementieren muss, so wie folgt aus:
public class B extends A{
private int y;
public B(){
}
public B(int x){
this(x, 0);
}
public B(int x, int y){
super(x);
this.y = y;
}
}
Meine Frage ist, : Was mache ich in public B()
? Benenne ich super(), so dass A den Standardwert/tut was auch immer und dann eine andere this.y = y
in diesem Konstruktor, oder rufe ich this(13)
?
Beide Ansätze scheinen einige schlechte Praktiken zu erfordern. Man hat mich this.y = y
an zwei Stellen schreiben. Der andere erfordert, dass ich die Standardwerte wiederhole und bei jeder Änderung eines Standardwertes geändert werden muss.
Sie müssen nichts tun. 'B()' ruft implizit 'super()' auf, also wird 'A()' aufgerufen. –
Aber wenn ich nichts tue, muss ich immer noch einen Standardwert für y angeben, was das Problem ist. Am Ende muss ich das nochmal machen, wenn ich es unten schon gemacht habe. – WinterDev
Oh, richtig. Es tut uns leid. Habe nicht bemerkt, dass du 'y' zugewiesen hast. Sie müssen also nur "y" in "B()" zuweisen. –