天天看点

你选择使用接口和抽象类的依据是什么?(必须要弄清楚明白的)

首先我们要对接口和抽象类有一定的认知:

接口的设计的目的就是对类的行为进行约束(因为接口不能规定其实现类类不可以有什么行为,只能规定其实现类需要有什么行为),就是强制要求不同的实现类必须具有一些相同的行为。它只约束了行为的有无,但不对如何实现行为进行限制。对“接口为何是约束”的理解,我觉得配合泛型食用效果更佳。

而抽象类的设计目的,是代码复用。当不同的类具有某些相同的行为(记为行为集合A),且其中一部分行为的实现方式一致时(A的非空真子集,记为B),可以让这些类都派生于一个抽象类Father。在Father这个抽象类中实现了B,避免让所有的子类来实现B,这就达到了代码复用的目的。而A减B的部分,留给Father的各个子类自己实现。正是因为A-B在这里没有实现,所以抽象类Father不允许实例化出来(否则当调用到A-B时,无法执行)。

选择依据:

如果是需要定义一些实现类都必须要实现的功能或者行为;可以选择使用接口。

如果有多个类中有相同实现的方法,还有必须实现的相同功能的不同实现方式时,建议使用抽象类,将相同实现的方法写在父类抽象类中,必须实现的功能定义成抽象方法写在抽象父类中。

个人拙见,感谢阅读。本文有什么错误欢迎指出,有更好的建议欢迎评论。