Хорошо, я сначала положу код, чтобы сделать его более ясным.подклассы абстрактного класса содержат объект, который не может получить доступ к реализации абстрактного метода.
*** Редактировать: Задача решается путем передачи экземпляра последовательности в диалог при создании последовательности, тогда диалог имеет внутреннюю ссылку для вызова.
public abstract class RavelSequence {
protected Dialog dialog; //every subclass uses one of these objects
public abstract void hit();
}
public class BattleSequence extends RavelSequence {
public void init(){ //this is the edited fix
dialog.setSequence(this); //
} //
public void hit(){ //the effect of a 'hit' in battle
doSomething();
}
}
public class OutOfBattleSequence extends RavelSequence {
public void init(){ //this is the edited fix
dialog.setSequence(this); //
} //
public void hit(){ //the effect of a 'hit' outside battle
doSomethingElse();
}
}
public class Dialog extends Container implements Runnable {
private RavelSequence sequence; //this is the edited fix
public void run(){
if (somethingHappens)
sequence.hit();
}
public void setSequence (RavelSeqence sequence){ //this is the edited fix
this.sequence = sequence; //
} //
}
То, что я хочу, так это для диалога, чтобы иметь возможность вызвать метод удар() реализован в зависимости от того, класс владеет экземпляр диалога. Я использую IntelliJ IDEA, и он говорит мне, что «нестатический метод не может ссылаться на статический контекст».
Все это выполняется внутри приложения, которое создает экземпляры объектов Sequence в зависимости от контекста игры, поэтому для удара нужно будет ссылаться на нестатические объекты в последовательности.
Хорошо, это работает! Кажется, это было немного легче, чем я думал. Я изменю измененный код в вопросе. Спасибо! – sideways8