Мне кажется, что я должен переместить методы computeResults()
из подклассов в родительский, поскольку они идентичны, но когда я делаю Eclipse, предупреждает на родительском компьютере, что The method computeField3() and computeField4() are undefined for the type Parent
Возможно, я не полностью понимаю наследование.
Я могу получить классы для компиляции, поскольку у меня есть это ниже, но тогда мои подклассы не следуют принципам Do not Repeat Yourself? Или мои классы правильно определены?Java-подклассы имеют повторяющийся метод
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 {' синтаксис в странном ... Вы должны использовать 'private void computeField4() {' иначе, ваша программа не будет синтаксически корректной. Я думаю, что функции всегда должны иметь параметры для указания параметров (даже если нет параметров). –
@AlexisClarembeau, это был типографский перевод реального кода в вопрос – jeff
, но вы называете 'computeField3' и' computeField4' на родительском объекте или только на дочернем объекте - если в вашем коде есть что-то вроде Parent p = new Parent(); p.computeField3() ', тогда вам нужно объявить computeField3 в классе Parent, объявить его абстрактным, если вам не нужно его на этом уровне –