因此,我有基本的Class X和扩展它的ClassY。
我在X类中有很多方法,这些方法在Y类中都被覆盖,
我想在这些方法之一中放入一些语句,即使重写该方法也可以调用它们,而不必在Y类中放入任何额外的代码。
有什么办法吗?
public class X
{
protected void method()
{
// vital statements;
}
}
public class Y extends X
{
protected void method()
{
/* vital statements still need to happen
* would rather not have to call it
* in every single class that extends X
*/
// non vital statement;
}
}
最佳答案
通用的方法(实际上也是唯一的方法)是使用super
关键字:
protected void method()
{
super.method();
non vital statement;
}
我说“基本上只是”是因为有其他方法可以做到这一点,但是它们需要更多的更改。一种技术是使中央方法成为最终方法和公共方法(因此可以调用但不能重写),然后让它调用受保护的抽象方法(可以重写但不能调用)。然后,人们可以通过重写抽象方法来自定义子类的行为。这称为模板方法模式。
完成目标所需的第三种方法是使用aspects.面向方面的编程,可以使用某些幕后的字节码魔术在运行时或编译时将“重要语句”添加到子类方法中。这需要一些特殊的工具,并给您的构建系统增加了一些复杂性,但是它的优点是对子类的作者完全不可见。