0

我想在每个子类中调用一个抽象方法。这是一个例子:

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
}

但是当我有多个从控制器扩展的子类时,只会更新第一个子类。怎么了?

我想要一个将在每个子类中调用的方法。

最好的问候,桑德罗

4

2 回答 2

0

使用关键字super为了调用定义的超类的方法。例如,如下所示:

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
   }

}

使用此关键字,您可以引用层次结构中较高的对象并调用其方法的实现。

于 2014-12-13T14:23:41.660 回答
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);
        }
    }
于 2014-12-23T08:50:17.510 回答