为什么接口优先于抽象类?
2022-09-01 04:43:32
我最近参加了一次面试,他们问我一个问题:“为什么接口比抽象类更受欢迎?
我试着给出一些答案,比如:
- 我们只能得到一个扩展功能
- 它们是100%抽象的
- 实现不是硬编码的
他们要求我采用您使用的任何JDBC api。“为什么它们是接口?
我能得到更好的答案吗?
我最近参加了一次面试,他们问我一个问题:“为什么接口比抽象类更受欢迎?
我试着给出一些答案,比如:
他们要求我采用您使用的任何JDBC api。“为什么它们是接口?
我能得到更好的答案吗?
面试问题反映了提问者的某种信念。我相信这个人是错的,因此你可以走两个方向之一。
他们想要的答案,嗯,其他海报已经很好地突出了这些。多接口继承,继承强制类做出实现选择,接口可以更容易地改变。
但是,如果你在不同意中创造了一个令人信服的(也是正确的)论点,那么面试官可能会注意到这一点。首先,强调界面的积极因素,这是必须的。其次,我想说的是,接口在很多情况下都更好,但它们也会导致代码重复,这是一件负面的事情。如果你有各种各样的子类,它们将执行大致相同的实现,再加上额外的功能,那么你可能需要一个抽象类。它允许您拥有许多具有细粒度细节的类似对象,而仅使用接口,您必须具有许多具有几乎重复代码的不同对象。
接口有很多用途,并且有令人信服的理由相信它们“更好”。但是,您应该始终使用正确的工具来完成这项工作,这意味着您无法注销抽象类。
一般来说,这绝不是一个应该盲目遵循的“规则”,最灵活的安排是:
interface
abstract class
concrete class 1
concrete class 2
该接口存在有几个原因:
这意味着您可以采用预先存在的类(或者只是必须从其他类扩展的类)并让它们与您的代码一起使用。
抽象类用于为具体类提供所有公共位。抽象类从编写新类或修改要扩展的类时开始扩展(假设它们从 java.lang.Object 扩展)。
您应该始终(除非您有充分的理由不这样做)将变量(实例、类、局部和方法参数)声明为接口。