第20 条:接口优于抽象类

    xiaoxiao2022-07-03  122

    接口优于抽象类

    定义:

    接口:没有方法实现(当然jdk1.8新加的default不算) 抽象类:可以有方法实现

    区别:

    接口:允许多实现 抽象类:只能单根继承

    优缺点

    接口不会改变类的层级,抽象类会改变类的层级。如何理解, 比如抽象类People有三个子类,学生,老师和父亲,他们是一个层级的,都是people的子类。 、 现在我们又有个抽象类audit只需要teacher和father类来继承,而student是不需要的,如下 这样子本来student,teaccher,和father是同一个层级的,现在搞的他们层级混乱了。可想而知抽象类多了层级会混乱成什么样子, 同时,对于接口来说,只是对于类功能的扩展,哪个类需要实现这个接口的功能就继承接口就行,不会破坏类的层级。 所以从这个角度来讲,接口是由于抽象类的。

    抽象类的优点

    抽象类可以配合接口来实现骨架 我们都知道实现接口的类都需要实现在实现中重写所有的定义在接口中的类,但是接口中的有些方法我们是不需要实现的,他有自己默认的实现方法,(当然1.8以后在接口中实现的default也是基于这个考虑的,现在我们暂时不管这个) 可以参考Collection接口,和AbstractCollection抽象类

    public abstract class AbstractCollection<E> implements Collection<E>

    Collection作为集合的接口,里面定义了集合需要实现的方法,AbstractCollection抽象类实现了这个接口,为很多方法加上了默认的实现,所以一个集合类在继承AbstractCollection抽象类的时候只需要实现其中定义为abstract的方法就可以了,而不用对Collection中的所有方法都去写他的实现了。这个就是抽象类的优点

    总而言之

    接口通常是定义允许多个实现的类型的最佳途径。如果你导出了一个重要的接口,就应该坚决考虑同时提供骨架实现类。而且,还应该尽可能地通过缺省方法在接口中提供骨架实现,以便接口的所有实现类都能使用。也就是说,对于接口的限制,通常也限制了骨架实现会采用的抽象类的形式。

    最新回复(0)