好的,我会把代码放在第一位,希望它更清楚。
***编辑:问题已解决,通过在创建序列时将序列实例传递给对话框,然后对话框具有要调用的内部引用。
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; //
} //
}
我想要发生的是让Dialog能够调用在拥有Dialog实例的任何类中实现的方法hit()。我正在使用 IntelliJ IDEA,它告诉我“无法从静态上下文引用非静态方法命中”。
整个事情在一个应用程序中运行,该应用程序根据游戏的上下文创建序列对象的实例,因此命中需要引用序列中的非静态对象。