因此,我有基本的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.面向方面的编程,可以使用某些幕后的字节码魔术在运行时或编译时将“重要语句”添加到子类方法中。这需要一些特殊的工具,并给您的构建系统增加了一些复杂性,但是它的优点是对子类的作者完全不可见。

07-26 09:29
查看更多