繁体   English   中英

有一个只调用重写的超类方法的子类方法有什么好处?

[英]Is there a benefit from having a subclass method that only calls the overridden superclass method?

在重构时,我在子类中遇到了以下方法:

public void disposeResultsTable() {
    super.disposeResultsTable();
}

保持这个方法有什么好处而不是简单地允许调用继承的超类方法?

我能想到的唯一技术原因是迈克尔在评论中提出的建议 - 使受限制的方法变得public

但是,我可以想到一些人为原因。

例如,这可以是一个方便的位置来放置一个断点来调试子类的disposeResultsTable的调用。 或许这可能是一个占位符 - “ 记得为这个类实现这个方法 ”,或者也许有人想明确地向这个代码的读者指出这个类使用父类的disposeResultsTable实现。 可能有更多的选择。

您是否尝试在VCS中查找此代码的历史记录? 也许原始作者提供了一条有用的提交消息。

Malt答案显示了通过仅调用超级实现来简单地覆盖方法的一个常见原因,即将可见性从protected更改为public 在您的示例中是否可能出现这种情况取决于超类中相应方法的可见性...

然而,还有另一个可能的原因 - 虽然它可能有点牵强和不寻常 - 这可能的原因是反思Class#getDeclaredMethods方法只返回......在这个类中声明的方法。

例如,请考虑以下程序:

import java.lang.reflect.Method;

public class TrivialOverride
{
    static class BaseClass
    {
        void method0() {}
        void method1() {}
    }
    static class ChildClass extends BaseClass
    {
        void method0() {}
    }

    public static void main(String[] args)
    {
        printDeclaredMethods(BaseClass.class);
        printDeclaredMethods(ChildClass.class);
    }

    private static void printDeclaredMethods(Class<?> c)
    {
        System.out.println("Declared methods in " + c.getSimpleName());
        for (Method m : c.getDeclaredMethods())
        {
            System.out.println(m.getName());
        }
        System.out.println();
    }
}

输出是

Declared methods in BaseClass
method0
method1

Declared methods in ChildClass
method0

因此, method0仅出现在子类的已声明方法列表中,因为它已从基类中重写。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM