Java提供了两种机制,可以用来定义允许多个实现的类型:接口和抽象类。这两种机制之间最明显的区别在于,抽象类允许包含某些方法的实现 ,
但是接口则不允许。一个更加重要的区别在与,为了实现抽象类定义的类型,类必须成为抽象类的一个子类,也就是使用extends关键字继承。
任何一个类,只要它定义了所有必要的方法,并且遵守通用约定,它就被允许实现一个接口,而不管这个类是处于类层次的哪个位置,接口实现使用
关键字implements。因为Java只允许单继承,抽象类作为类型定义受到了很大的限制。
现有的类可以很容易被更新,以实现新的接口。
接口是定义mixin(混合类型)的理想选择。
接口允许我们构造非层次结构的类型框架。
抽象类的优越性在于,我们可以对于一些方法提供实现,而把一些需要客户端程序员具体去定义的方法定义为抽象的,而那些在抽象类中具体实现
的方法,是基于定义为抽象的方法的,也就是具体实现的方法,只是简单的调用抽象方法,或者经过简单逻辑之后调用抽象方法。这样就简化了客户端
程序员的工作压力,而不是像接口那样所有的方法都需要客户端程序员去实现。
接口的优越性在于,一个类可以实现多个接口,而不是像抽象类那样,只能继承一个。
结合这两者的优势,推出骨架实现类(AbstractInterface),骨架实现类一个抽象类,这个抽象类实现了需要实现的接口,由于骨架抽象类是一个抽象类
可以包含抽象的方法,那么我们就把接口中需要客户端程序员需要实现的方法定义为抽象方法,而把接口中仅仅是需要调用其他抽象方法的方法,在骨架
实现类中,定义为具体的方法,提供实现。 这样通过两者的结合,骨架实现类具有了接口和抽象类的优势。
JDK的的集合框架中,具有大量这样的骨架实现类:AbstractCollection,AbstractSet,AbstractList,AbstractMap