Как назначить свой конструктор конструктором по умолчанию?
Есть абстрактный класс CalculationAbstract и несколько его наследников. У этого класса есть два поля, значения для которых нужно взять из объекта главного класса приложения. Решил сделать это через конструктор
public CalculationAbstract (GUI parent) {
this.dataTable = parent.getDataTable();
this.pointList = parent.getPointList();
}
В абстрактном классе ошибок нет, а вот в его наследниках произошла ошибка, что у CalculationAbstract нет конструктора по умолчанию.
There is no dafault constructor available in CalculationAbstract
Я знаю почему эта ошибка возникает. Потому что при создании своего конструктора, конструктор по умолчанию не создается. Но мне и не нужен пустой конструктор. Есть ли способ назначить свой конструктор конструктором по умолчанию, чтобы исправить эту ошибку?
Класс одного из наследников
public class ExpCalculate extends CalculationAbstract{
// y = exp (b*x+a)
public double getNewX(){
return CurrentPoint.getX();
}
public double getNewY(){
return Math.log(CurrentPoint.getY());
}
public double getTransformedA(){
return this.calculateCommonPart().get(0);
}
public double getTransformedB(){
return this.calculateCommonPart().get(1);
}
public ArrayList<Double> getApproximationY(){
ArrayList<Double> YList = new ArrayList<>();
for (double i = getMaxX0(); i<getMaxX0(); i+=deltaX*0.01){
//double Y = Math.exp(getTransformedB()* pointList.get(i).getX() + getTransformedA());
double Y = Math.exp(getTransformedB()*i + getTransformedA());
YList.add(Y);
}
return YList;
}
public String getFormula (){
return "Y = e^" + getTransformedB() + "*x +" + getTransformedA();
}
}
Ответы (1 шт):
Я знаю почему эта ошибка возникает.
Нет вы не совсем верно понимаете ситуацию.
Ваш класс наследник не имеет конструктора, следовательно компилятор создает для него конструктор по умолчанию - без параметров, который вызывает такой же конструктор в предке, а его нет.
Варианта 2:
1) Вы создаете конструктор по умолчанию (а он всегда без параметров) в родителе - но вы такой вариант не хотите
2) Вы создаете конструктор в наследнике и там явно указываете через super() вызов своего конструктора в предке, примерно так:
ExpCalculate(GUI parent) {
super(parent);
}
Если ни один вариант не подходит, значит вы что-то неверно проектируете или (что не исключено) - я вас не понимаю.