我有 100 个扩展抽象类的类。
其中 50 个类需要具有方法 foo()
,每个类的方法各不相同。
据我所知,有两种方法可以做到这一点:
选项#1
:
使用 foo()
创建单一方法接口(interface)
,并在 50 个类中实现
此接口(interface)
。
选项#2
:
将abstract
方法头foo()
添加到父类中,并将50个类中的foo()
方法留空。
以下哪一个是更好的约定,为什么?或者还有我没有想到的更好的方法吗?
最佳答案
还有第三个选项 - 创建一个扩展基抽象类的抽象类,并让 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
抽象类中,因为从您的要求来看,该方法不适用于粗略的情况一半的类(class)。
还有更多参数需要考虑。
扩展抽象类的每个类都需要
foo()
吗?- 如果不是:不起作用的方法很难看,请转到步骤 3 或使用接口(interface)。
- 如果是:请转至第 2 步。
每个子类都以同样的方式实现
foo()
吗?- 如果是:在父类(super class)中实现它。
- 如果否:转到步骤 3
是否有更大的子类子部分可以从另一个抽象子类中的相互实现中受益?
- 如果是:使用中间抽象类来实现功能。
- 如果否:将
foo()
的实现定向到每个子类。
关于java - 抽象类方法头与接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23985694/