假设有三个类,一个是另一个类的子类。每一个都覆盖父母'方法
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()
时,这将导致一种方法
调用顺序如下:
performFinalTasks();
performMiddleTasks();
performBaseTasks();
我想将perfomFinalTasks()
置于performMiddleTasks()
和之间
performBaseTasks()
。我怎么能这样做?
performMiddleTasks();
performFinalTasks();
performBaseTasks();
答案 0 :(得分:2)
在final类doStuffDifferently()中编写一个公共方法,并按此顺序调用这些方法。我不确定是否可以通过doStuff()方法中的任何其他技巧来实现。
答案 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();
}
}
一种不是非常多态的方法调用链接方法,但是原来的设计又有点奇怪。