0

假设三个类,一个是另一个的子类。每个覆盖父母的方法。

public class BaseClass {

    public void doStuff() {
        performBaseTasks();
    }

}

public class MiddleClass extends BaseClass {

    // {BaseClass} Overrides

    public void doStuff() {
        performMiddleTasks();
        super.doStuff();
    }

}

public class FinalClass extends MiddleClass {

    // {BaseClass} Overrides

    public void doStuff() {
        performFinalTasks();
        super.doStuff();
    }

}

调用时new FinalClass().doStuff(),会导致方法调用顺序如下:

  1. performFinalTasks();
  2. performMiddleTasks();
  3. performBaseTasks();

我想带上 perfomFinalTasks()和。我怎样才能做到这一点?performMiddleTasks()performBaseTasks()

  1. performMiddleTasks();
  2. performFinalTasks();
  3. performBaseTasks();
4

2 回答 2

2

在最终类 doStuffDifferently() 中编写一个公共方法并按此顺序调用这些方法。我不确定是否可以通过 doStuff() 方法中的任何其他技巧来做到这一点。

于 2013-01-18T18:34:22.757 回答
1

一种可能的方法,如果你可以使中产阶级抽象:

public abstract class MiddleClass extends BaseClass {

    // {BaseClass} Overrides
    public void doStuff() {
        performMiddleTasks();
        doProxyExec();
        super.doStuff();
    }

    public abstract void doProxyExec();
}

您覆盖子类中的代理方法:

public class FinalClass extends MiddleClass {

    // {BaseClass} Overrides
    public void doStuff() {
        super.doStuff();
    }

    // {MiddleClass} Overrides
    public void doProxyExec(
        performFinalTasks();
    }
}

方法调用链接的一种不是很多态的方式,但话说回来,原来的设计有点……奇怪。

于 2013-01-18T18:38:20.757 回答