这可能是一个通用的OOP问题。我想在接口和抽象类的使用基础上做一个通用的比较。
什么时候需要使用接口,什么时候需要使用抽象类?
这可能是一个通用的OOP问题。我想在接口和抽象类的使用基础上做一个通用的比较。
什么时候需要使用接口,什么时候需要使用抽象类?
当前回答
如果下列语句适用于您的情况,请考虑使用抽象类:
您希望在几个密切相关的类之间共享代码。 您希望扩展抽象类的类具有许多公共方法或字段,或者需要除public以外的访问修饰符(例如protected和private)。 您希望声明非静态或非final字段。这使您能够定义可以访问和修改其所属对象状态的方法。
如果这些语句适用于您的情况,请考虑使用接口:
您希望不相关的类实现您的接口。例如,Comparable和Cloneable接口是由许多不相关的类实现的。 您希望指定特定数据类型的行为,但不关心由谁实现其行为。 您希望利用多个继承。
源
其他回答
如果您想提供一些基本实现,请使用抽象类。
我为此写了一篇文章:
抽象类和接口
总结:
当我们谈论抽象类时,我们是在定义对象类型的特征;指定对象是什么。
当我们谈论接口和定义我们承诺提供的功能时,我们谈论的是建立一个关于对象可以做什么的契约。
对我来说,在很多情况下我会选择接口。但在某些情况下,我更喜欢抽象类。
OO中的类通常指的是实现。当我想强制一些实现细节到子程序时,我使用抽象类,否则我就使用接口。
当然,抽象类不仅在强制实现方面有用,而且在许多相关类之间共享一些特定的细节方面也有用。
1.如果您正在创建为不相关的类提供公共功能的东西,请使用接口。
2.如果您正在为层次结构中密切相关的对象创建一些东西,请使用抽象类。
如果我们有一个对所有派生类都相同的实现,那么此时最好使用抽象类而不是接口。当我们有一个接口时,我们可以将我们的实现移动到任何实现接口的类。在抽象类中,它避免了代码重复,并共享所有派生类的实现。接口允许开发松散耦合的系统,这有助于更好的测试。