У меня есть абстрактный вызов метода в конструкторе моего супер. Я сталкиваюсь с ошибкой «вызов конструктора должен быть первым оператором в конструкторе». потому что мне нужно инициализировать некоторое состояние в моих подклассах перед вызовом конструктора супер.
Я понимаю, что вызов конструктора должен быть первым ... но это вызывает у меня некоторые проблемы.
В моем суперклассе есть абстрактный метод, который все подклассы реализуют сами.
Но конструктор подкласса требует аргументов, которые должны быть обработаны до запуска абстрактного метода.
В моем коде у меня есть абстрактный метод в конструкторе SuperClass, поэтому вы, конечно, поймете проблему:
Супер класс делает:
- Получить info1 и info2, используя super (i1, i2)
- Выполняет абстрактный метод через подкласс
Но конструктор Superclass мало что знал, что ему также нужны info3 и info4, которые объявлены в строках ниже
супер () - строка.
Я пытался придумать, как конструктор Суперкласса должен вернуться и собрать информацию из подкласса, прежде чем
он выполняет метод, но я ни о чем не думал.
Кроме того, метод не может требовать аргументов, поскольку аргументы различаются для всех абстрактных методов всех подклассов.
Те из вас, кто опытен, как мне обойти это?
После некоторого поиска в Google, похоже, это связано с этим:
http://webcache.googleusercontent.co. .. s-конструктор /
Но все еще новичок, так что трудно удержаться на ..
Я чувствую, что мог бы избежать всех этих проблем, если бы мог просто использовать super () после обработки конструкторов подклассов.
Код по запросу:
abstract public class Prylar {
abstract public Integer value();
private String itemName;
private Person owner;
public Prylar(Person thisOwner, String iN){
owner = thisOwner;
itemName = iN;
value = value();
}
public class Smycken extends Prylar{
private int antalStenar;
private boolean guldEllerSilver;
private int value;
public Smycken (Person who, String n, int aS, boolean material){
super(who,n);
antalStenar = aS;
guldEllerSilver = material;
}
public Integer value() {
if (guldEllerSilver){
value = 2000;
}
else{
value= 700;}
value += (500*antalStenar);
return value;
}
}
И я просто хочу закончить, сказав всем спасибо, что нашли время почитать и помочь парню. Я очень ценю это. Будем надеяться, что когда у кого-то еще возникнет подобная проблема, он наткнется на это.
Спасибо, ребята!