我想在每个子类中调用一个抽象方法。这是一个例子:
public abstract class ControllerAbs implements UiListener
/**
* implements from ui listener. when it's called, then must the ui be updated
*/
@Override
public synchronized void Update() {
// for change ui elements from another no fx-thread
// see http://stackoverflow.com/questions/21674152/timer-error-java-lang-illegalstateexception
Platform.runLater(new Runnable() {
@Override
public void run() {
UiUpdate();
}
});
}
/**
* update ui in subcontroller
*/
protected abstract void UiUpdate();
}
现在,我使用抽象方法扩展我的子类:
@Override
protected void UiUpdate() {
// update ui
}
但是当我有多个子类将从controllerabs扩展时,只会更新第一个子类。有什么问题?
我想要一个将在每个子类中调用的方法。
祝你好运, 桑德罗
答案 0 :(得分:0)
使用关键字super
来调用定义的supclass方法。例如。如下所示:
public class SubClass1 extends ControllerAbs {
@Override
protected void UiUpdate() {
// Update for Subclass 1
}
}
public class SubClass2 extends SubClass1 {
@Override
protected void UiUpdate() {
// Update for Subclass 2
super.UiUpdate(); // update in the upper subclass
}
}
使用此关键字,您可以引用层次结构中较高的对象并调用其方法的实现。
答案 1 :(得分:0)
我创建了一个静态控制器列表
通过创建新控制器或子控制器将其添加到列表中。
public class ControllerAbs() implements UiListener {
private static ArrayList<ControllerAbs> controllers;
// code
protected registerUiUpdateListener(ControllerAbs controller) {
controllers.add(controller);
}
/**
* implements from ui listener. when it's called, then must the ui be updated
*/
@Override
public synchronized void Update() {
// for change ui elements from another no fx-thread
// see http://stackoverflow.com/questions/21674152/timer-error-java-lang-illegalstateexception
Platform.runLater(new Runnable() {
@Override
public void run() {
for (ControllerAbs controller : controllers) {
controller.uiUpdate(); // update ui in controller
}
});
}
/**
* update ui in subcontroller
*/
protected abstract void uiUpdate();
}
public class SubClass1 extends ControllerAbs {
public SubClass1() {
registerUiUpdateListener(this); // add to list
}
@Override
protected void uiUpdate() {
// lblTest.setText(testVariable);
}
}
public class SubClass2 extends ControllerAbs {
public SubClass2() {
registerUiUpdateListener(this); // add to list
}
@Override
protected void uiUpdate() {
// lblTest.setText(testVariable);
}
}