如果没有实现,是否建议在继承抽象类时重新声明抽象方法?

时间:2015-04-11 02:09:42

标签: java

如果抽象方法没有实现,那么在继承抽象类时重新声明它是一种好习惯吗? e.g。

abstract class AbstractBase {
    abstract void method1();
    abstract void method2();
    ..
}

abstract class AbstractPartialImpl extends AbstractBase {
    void method1() {...}
    abstract void method2();     // SHOULD I KEEP THIS?
    protected abstract void method3();
    ...
}

class FullImpl extends AbstractPartialImpl  {
    void method2() {...}
    protected void method3() {...}
}

4 个答案:

答案 0 :(得分:4)

  

如果抽象方法没有实现,那么在继承抽象类时重新声明抽象方法是不错的做法?

这个问题是主观的,大多数风格问题也是如此。

但是,这是一些客观有用的具体案例:

  • 您可以重新声明该方法以提高其可见性;例如package private - >受保护的 - >公共

  • 您可以重新声明该方法以抛出一组较小的例外。

  • 您可以重新声明方法以返回原始类型的子类型。

  • 您可以重新声明该方法,以便添加更具体的javadoc。


主观上......如果以上都不适用,我会说重新声明不会增加值,应该删除。

答案 1 :(得分:1)

我建议反对它,因为如果您决定更改顶部的API,现在您必须记住在层次结构中一直更改它 - 否则您现在可以...

abstract void method2(String arg);

......以及......

abstract void method();

两者都定义了。因此,不建议将它一直定义为层次结构中的抽象。

基本上,它会为您提供更多维护代码而不会给您带来任何好处。

答案 2 :(得分:0)

我没有看到任何问题,就像你说“它没有实现它”

请记住,一个班级只能extends一个班级。

另请注意,implementsextends不同。

答案 3 :(得分:0)

我没有看到重新声明一个你不打算实现的抽象方法的任何意义,除非可能为了向该文档附加要求扩展该抽象子类的细节。即使这样也是对工具局限性的鞠躬,而且经常不需要。如果你为我工作,是的,我可能会让你删除AbstractPartialImplementation.method2()