《Effective Java》第20条:接口优于抽象类。
原因一:现有的类可以很容易被更新,以实现新的接口
现有的类想实现新的功能,可以继承一个或者多个接口即可。而如果一个已经继承了某个超类的类,不可能再去继承一个抽象类,只能继承接口。从这个角度而言,一个类无论是否继承了超类,都可以很方便的通过继承接口来扩展自身。
原因二:接口是定义 mixin (混合类型)的理想选择
混合类型,我找了最通俗移动的解释,如果一个类已经有了一个主要的超类型,那么通过实现一个接口,这个类可以拥有另一个次要的超类型,这种次要的超类型叫做混合类型。所以说接口是非常理想的混合类型工具。
原因三:接口允许构造非层次结构的类型框架
由于接口多继承的特性,其非常适合非层次的类型框架。比如,Singer歌手和Songwriter作曲家两个接口,有的人同时具备这两种属性,如下面代码,采用接口继承的方式,非常容的将进行组合。
public interface Singer{
AudioClip sing(Song s);
}
public interace Songwriter{
Song compose(int cha 「tPosition);
}
public interface SingerSongwriter extends Singer, Songwriter{
Audi oClip strum();
void actSensitive();
}
原因四:通过包装类( wrapper class )模式, 接口使得安全地增强类的功能成为可能
在子类和父类中添加转