首页 > 代码库 > Effective Java之接口与抽象

Effective Java之接口与抽象

  我们知道,Java语言只允许实现单继承,但是可以实现多个接口,抽象类也是类啊,所以一个具体的类只能继承一个抽象类,但是在设计抽象类时,肯定是将相关的功能放在一个抽象类里面的,那么针对某个需要实现多种功能的类来讲,继承多个抽象类是不可能的,在这种情况下,接口提供了高度的灵活性,试想一下,一个接口中基本都是相关的且必须实现的方法,那么当某个类需要实现的功能比较多时,它可以很灵活地指定实现多个接口就行,但这样也有一个缺点,接口里面是不提供实现的,但抽象类里面对于非抽象方法,可以提供实现的过程,那么,如果某个接口类中需要增加一个方法,那么所有实现该接口的类都得实现这个方法,在这种接口设计有缺陷的情况下,可能会带来大量的修改工作,这也体现出了抽象类的优势,我在抽象类的文件中实现该方法,那么它的所有子类都可以不用修改。

  还有一种折中的方法,可以将抽象类的优势和接口的优势相结合,就是为每一组重要的接口类提供一个骨架类,也就是抽象接口类,详细的案例见AbstractCollection类,通过骨架类,来封装接口的变化,同时保留了接口的扩展性。

Effective Java之接口与抽象