我知道标题很混乱,但我想不出另一种措辞。
所以,我想要实现的目标:我已经看到一些java程序有一个子类加载,它们的超类中有一个方法,并且它们都在调用supers方法时运行。 我想要做的是,当我调用Synchroniser.RunAll方法时,让单个子类的Synchroniser运行自己的RunAll方法。
我尝试了很多东西,而且我已经搜索了很多东西,但我发现的东西对我不起作用。
以下是我所拥有的:SUPER类
public class Synchroniser
{
public Synchroniser()
{
RunAll();
}
protected void RunAll()
{
System.out.println("RunAll");
}
}
SUBCLASS:
import org.lwjgl.input.Keyboard;
public class ArrayList extends Synchroniser
{
public ArrayList()
{
}
public static void Keybind(Info info)
{
info.Toggle();
}
@Override
protected void RunAll()
{
System.out.println("Ran ArrayList");
}
}
答案 0 :(得分:1)
好像您正在寻找观察者模式。你用Google搜索了吗?或者模板方法?
您的代码不匹配(这可能是它不起作用的原因),但您对问题的描述确实如此。
答案 1 :(得分:0)
<强>更新强>
根据您的最新评论,@ Luchian是正确的评论。下面是一个应用于您的用例的简单示例 - ps:使用现有JDK类作为您自己的类的名称(ArrayList)不是一个好主意:
public class Test {
public static void main(String[] args) {
ArrayList child1 = new ArrayList(1);
ArrayList child2 = new ArrayList(2);
Synchronizer sync = new Synchronizer(); //prints RunAll in Parent
sync.addListener(child1);
sync.addListener(child2);
sync.runAll(); //prints RunAll in Parent, in Child 1 and in Child 2
}
public static interface RunAll {
void runAll();
}
public static class Synchronizer implements RunAll {
List<RunAll> listeners = new CopyOnWriteArrayList<RunAll>();
public Synchronizer() {
runAll();
}
public void addListener(RunAll l) {
listeners.add(l);
}
@Override
public void runAll() {
System.out.println("RunAll in Parent");
for (RunAll l : listeners) {
l.runAll();
}
}
}
public static class ArrayList implements RunAll {
private final int i;
private ArrayList(int i) {
this.i = i;
}
@Override
public void runAll() {
System.out.println("RunAll in Child " + i);
}
}
}