0

3 つのクラスがあり、一方が他方のサブクラスであると仮定します。それぞれが親のメソッドを上書きします。

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

中産階級を抽象化できる場合の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 に答える