如果抽象方法没有实现,那么在继承抽象类时重新声明它是一种好习惯吗? 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() {...}
}
答案 0 :(得分:4)
如果抽象方法没有实现,那么在继承抽象类时重新声明抽象方法是不错的做法?
这个问题是主观的,大多数风格问题也是如此。
但是,这是一些客观有用的具体案例:
您可以重新声明该方法以提高其可见性;例如package private - >受保护的 - >公共
您可以重新声明该方法以抛出一组较小的例外。
您可以重新声明方法以返回原始类型的子类型。
您可以重新声明该方法,以便添加更具体的javadoc。
主观上......如果以上都不适用,我会说重新声明不会增加值,应该删除。
答案 1 :(得分:1)
我建议反对它,因为如果您决定更改顶部的API,现在您必须记住在层次结构中一直更改它 - 否则您现在可以...
abstract void method2(String arg);
......以及......
abstract void method();
两者都定义了。因此,不建议将它一直定义为层次结构中的抽象。
基本上,它会为您提供更多维护代码而不会给您带来任何好处。
答案 2 :(得分:0)
我没有看到任何问题,就像你说“它没有实现它”。
请记住,一个班级只能extends
一个班级。
另请注意,implements
与extends
不同。
答案 3 :(得分:0)
我没有看到重新声明一个你不打算实现的抽象方法的任何意义,除非可能为了向该文档附加要求扩展该抽象子类的细节。即使这样也是对工具局限性的鞠躬,而且经常不需要。如果你为我工作,是的,我可能会让你删除AbstractPartialImplementation.method2()
。