类和接口-接口优于抽象类

这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战

前言

接口和抽象类都可以用来为某些实例方法提供实现,他们的区别在于为了实现由抽象类定义的类型,类必须是抽象类的子类,而这样会把类的唯一一个父类的名额用掉。而接口则是只要对应的类定义了所有必要的方法就可以了,不管这个类在哪里。

接口的好处

容易更新

现有的类如果想实现新的接口,只要实现这些必要的方法,并在类的声明中增加一个implements子句即可。而如果要给一个已经有了父类的类扩展新的抽象类,对不起,做不到!你只能给这个父类扩展新的抽象类,而这就和我们的原有的类层次不同了,所有继承了这个父类的,都得实现这个抽象类!

定义混合类型的理想选择

混合类型(mixin)代表这个类有一些可供选择的行为,比如Compareable接口就是这样一个接口,实现了这么一个接口,就表明了它的实例可以与其他的可相互比较的对象进行排序。

image.png 通过这种接口名称,我们可以很明确的见名知义,知道接口提供了什么功能给类。

允许构造非层次结构的类型框架

相较于编写一个臃肿的类层次,使用接口带来了一种灵活性,如果每个要被支持的属性组合都需要一个单独的类,那么n个属性就需要2的n次方个组合类,而使用接口我们就可以随意组合接口而不需要考虑相应的层级。

安全增强类的功能

要想安全地增强类的功能,就不能使用抽象类,因为如果使用抽象类,除了继承的手段来增加类的功能,没有别的办法。

猜你喜欢

转载自juejin.im/post/7036364757980413989