我是否需要在子类中重新实现Java Observer,以便调用与父方法同名的子类方法?

时间:2018-04-08 19:10:49

标签: java observer-pattern observers

为超长标题道歉。我很难找到明确的解决方案。我是Java的新手,我的问题是关于Java的Observer update()方法。

[编辑]:我正在使用Java 8.使用Observable和Observer是我的任务要求。

我将这些类放在一个文件中,比如FileA.java:

public abstract class Filter implements Observer
{
    @Override
    public abstract void update(Observable o, Object arg);
}
public abstract class Tester extends Filter
{
    @Override
    public void update(Observable o, Object arg)
    {
        // Some code here. This is activated when another
        // class in FileA.java calls a write() method.
        // The write() method is also located FileA.java.

        Boolean passed = test(message);
    }
    public Boolean test(Message message)
    {
        // Some code here.
    }
}

在另一个文件中,假设FileB.java,我有:

public abstract class SubTester extends Tester
{
    // No update function. Was hoping that the update()
    // method in Tester would call SubTester's test()
    // method.

    public Boolean test(Message message)
    {
        // Some slightly different code here.
    }
}

我没有包含所有代码,因为它与我的问题无关,因为我知道FileA.java中的代码工作正常。我的问题是关于FileB.java。

在FileA.java中,这是正确的(正确):

  1. FileA.java中的另一个类调用FileA.java的Pipe类的write()方法。
  2. write()通知观察者,因此它激活了Tester的update()方法。
  3. 调用Tester的test()方法并成功运行。
  4. 在FileB.java中,会发生这种情况:

    1. FileB.java中的另一个类调用FileA.java的Pipe类的write()方法。
    2. write()通知观察者,因此它激活了Tester的update()方法。
    3. 调用Tester的test()方法并运行。
    4. 当我运行FileB.java时,我希望Tester的update()方法调用SubTester的test()方法而不是调用Tester的test()方法。

      我知道修复此问题的方法是将另一个update()方法实现添加到SubTester。但是,我希望由于SubTester的test()方法,返回函数和参数与其父类相同,因此可能有一种方法可以防止这种情况,因为update()方法将完全相同。因此,这样做会复制父类的代码。

      有没有办法在不重复代码的情况下获得此结果,而在SubTester中使用相同的Tester update()实现?提前谢谢!

0 个答案:

没有答案