Ich fühle mich wie ich die computeResults()
Methoden aus den Unterklassen auf die Eltern verschieben sollte, da sie identisch sind, aber wenn ich Eclipse warnt auf die Eltern, The method computeField3() and computeField4() are undefined for the type Parent
Vielleicht verstehe ich Vererbung nicht vollständig.
Ich kann die Klassen kompilieren, wie ich es unten habe, aber dann folgen meine Unterklassen nicht dem Prinzipal Do not Repeat Yourself? Oder sind meine Klassen richtig definiert?Java Subclasses haben eine repeative Methode
public class Parent {
private BigDecimal field1;
private BigDecimal field2;
protected BigDecimal field3;
protected BigDecimal field4;
protected void computeField1() {
// math equation identical b/n all subclasses
setField1(value);
}
protected void computeField2() {
// math equation identical b/n all subclasses
setField2(value);
}
}
public class Child1 extends Parent {
void computeResults() {
// This method is redundant and I would like to move to Parent
computeField1();
computeField2();
computeField3();
computeField4();
}
private void computeField3() {
// math equation for Child1 and Child2 differs for field3
setField3(value);
}
private void computeField4() {
// math equation for Child1 and Child2 differs for field4
setField4(value);
}
}
public class Child2 extends Parent {
void computeResults() {
// This method is redundant and I would like to move to Parent
computeField1();
computeField2();
computeField3();
computeField4();
}
private void computeField3() {
// math equation for Child1 and Child2 differs for field3
setField3(value);
}
private void computeField4() {
// math equation for Child1 and Child2 differs for field4
setField4(value);
}
}
Mmmh, 'private void computeField4 {' Syntax in seltsame ... Sie sollten 'private void computeField4() {' sonst wird Ihr Programm nicht syntaktisch korrekt sein. Ich denke, Funktionen sollten immer Parens haben, um Parameter anzuzeigen (auch wenn es keinen Parameter gibt). –
@AlexisClarembeau, das war ein Tippfehler, der echten Code in die Frage übersetzt – jeff
aber rufen Sie 'computeField3' und' computeField4' auf einem übergeordneten Objekt oder nur auf Kindobjekt - wenn in Ihrem Code haben Sie so etwas wie: Parent p = new Parent(); p.computeField3() 'dann müssen Sie computeField3 in Parent-Klasse deklarieren, deklarieren Sie es abstrakt, wenn Sie es nicht auf dieser Ebene benötigen –