Whats the difference between an abstract class and interface? When would you want to use them?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
When to use an interface instead of an abstract class and vice versa?
Difference between Interface, abstract class, sealed class, static class and partial class in C#?
1 2 3 4 5 6 7 8 9 | public class Guru{ public Enemy(int x, int y, int health, int attack, ...) { ... } ... } public class UserDefinedClass extends Enemy { ... } |
如果预期要创建组件的多个版本,请创建一个抽象类。抽象类提供了一种简单易行的方法来版本化您的组件。通过更新基类,所有继承类都将随更改自动更新。另一方面,接口一旦创建就不能更改。如果需要接口的新版本,则必须创建一个全新的接口。
- 接口无法实现方法。
抽象类可以实现方法。
一个接口只能从另一个接口继承。
抽象类可以从类和一个或多个接口继承。
接口不能包含字段。
- 抽象类可以包含字段。
OAN接口意味着对象和想要使用它的代码之间可能存在的最小耦合。抽象类意味着类之间的一些更强大的关系,可能还有实现的一些共性。
当我们希望尽可能多地分离关注点时,应该使用接口(例如依赖注入)
应该使用抽象类对域中存在强关系的公共对象族进行建模。
抽象类不能实例化,但可以包含代码,而接口只包含方法定义,但不包含任何代码。您需要实现接口中定义的所有方法。
如果您的逻辑对于所有派生类都是相同的,那么最好使用抽象类而不是接口。
可以实现多个接口,但只能从一个类继承。