美文网首页
Effective Java - 接口优于抽象类

Effective Java - 接口优于抽象类

作者: DZQANN | 来源:发表于2022-05-29 22:57 被阅读0次

使用接口的好处

  1. 现有的类可以很容易被更新,以实现新的接口。

    只需要添加新的方法,并且implements新接口即可

  2. 接口是定义混合类型(mixin)的理想选择。

  3. 接口允许我们构造非层次结构的类型框架。

    public interface Singer {
      AudioClip sing(Song s);
    }
    
    public interface Songwriter {
      Song compose(int chartPotision);
    }
    

    如果需要同时是歌唱家和作曲家,如果是接口则只需要同时implements Singer, Songwriter

  4. 接口可以更安全有力地增强功能(组合优于继承)

模板方法可以将接口和抽象类的优势结合起来

  1. 接口负责定义类型,以及缺省方法(default方法),模板负责实现除了基本方法外的其它方法
  2. 对于接口的大多数实现来讲,扩展骨架实现类是个很显然的选择,但并不是必需的。如果类无法扩展骨架实现类,这个类始终可以手工实现这个接口
  3. 不能为Object方法(equalshashcode)等提供缺省方法

思考

  1. 模板方法是开发中经常会用到的设计模式。应该考虑尽量为抽象类的public方法抽出来接口,所有的其它依赖,都应该依赖接口而不是抽象类。我们不能保证这个接口的所有实现都要走抽象的模板,接口更加适合作为类或者方法的依赖。

    这一点在之前的Code Review讲GEO的copy paste中提到过。对于输入,分别按照code->层级匹配->name exact match -> name fuzzy match的顺序,可以将输入->查询结果的过程作为一个接口,common流程作为抽象类,code、name具体的SQL可以作为实现。而层级匹配不能简单用抽象类框架实现,则可以自己实现接口,最后的update结果方法直接依赖接口

  2. 抽象类相比于接口,最大的有点是适合迭代演变。对于新添加public方法的case来讲,抽象类只需要在基类上添加出public方法以及实现即可,而接口如果不能提供default实现,则几乎不能在当前接口上新添加方法。

相关文章

  • 提示二十

    今天来看提示二十: 接口优于抽象类。 Java 有两种机制来定义允许多个实现的类型:接口和抽象类。 接口有如下几个...

  • Java基础

    JAVA开发六大原则 抽象类和接口的对比 如何去设计类和接口(Effective Java) 1、使类和成员的可访...

  • Effective Java 3rd 条目20 接口优于抽象类

    Java有两个机制定义允许多个实现的类型:接口和抽象类。因为在Java8中引入了接口的默认方法(default m...

  • 接口优于抽象类

    Java程序设计语言提供了接口和抽象类两种机制来定义允多个实现的类型。这两种机制的主要区别有 现有类可以很容易被更...

  • 接口优于抽象类

    第18条:接口优于抽象类 1.内容向导 2.接口的优点 现有的类可以很容易的被更新,以实现新的接口。如果你前期编写...

  • Effective Java 第三版——20. 接口优于抽象类

    Tips《Effective Java, Third Edition》一书英文版已经出版,这本书的第二版想必很多人...

  • Java基础-抽象类和接口

    抽象类和接口也是 Java 面试中常考的,下面就来总结一下抽象类和接口的相关知识。 抽象类是类,Java 中类是单...

  • JAVA中的抽象类和接口

    父类-抽象类:Telephone.java 接口:IPayGame.java 继承了抽象类的子类:CellPhon...

  • java抽象类和接口

    参考:java抽象类和接口--树上月 总结:1.抽象类在java语言中体现的是继承关系,即"is-a"关系,而接口...

  • java抽象类和接口小记

    Java抽象类和接口小记 Java抽象类和接口实现了java的多态.多态是面向对象程序语言的核心,在项目开发过程中...

网友评论

      本文标题:Effective Java - 接口优于抽象类

      本文链接:https://www.haomeiwen.com/subject/iquaprtx.html