我有100个扩展抽象类的类。
这些类中的50个需要使用方法foo()
,这在每个类中都有所不同。
我知道有两种方法可以做到这一点:
Option #1
:
使用interface
创建一个方法foo()
,并在50个类中创建implement
个interface
。
Option #2
:
向父类添加abstract
方法标头foo()
,并将foo()
方法留空50个类。
其中哪一个是更好的约定?为什么?或者有没有更好的方法我没有想到?
答案 0 :(得分:6)
还有第三个选项 - 创建一个扩展基本抽象类的抽象类,并让50个类扩展为“中间”抽象类,如下所示:
abstract class Base {
public abstract void bar();
}
abstract class BaseWithFoo extends Base {
public abstract void foo();
}
class OneOfFiftyWithFoo extends BaseWithFoo {
@Override
public void foo() {
... // Implementation
}
}
如果你需要在foo
的50个实现中共享一些公共代码,我会使用这种方法。此外,它还允许您编写知道对象具有Base
和 BaseWithFoo
方法的代码。
我肯定不将foo
添加到Base
抽象类,因为根据您的要求,该方法不适用于大约一半的类。< / p>
需要考虑更多参数。
扩展抽象类的每个类都需要foo()
吗?
每个子类是否以同样的方式实现foo()
?
是否有更大的子类子部分可以从另一个抽象子类中的相互实现中获益?
foo()
的实现指向每个子类。