Java基础—03:接口与抽象类

面向接口编程是java开发中一个很常用且重要的思想,所以在这整理一下接口的相关知识,

什么是接口?

       接口是是对系统行为的抽象,是抽象方法的集合,是统一的行为规范。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。接口只是一种形式,接口自身不能做任何事情。


为什么要使用接口?

  1. 一种编码规范,起到约束作用;
  2. 一个类只能继承一个父类,但可以继承多个接口;
  3. 大型软件开发过程中,很多人开发同一个产品,不同部件或层次的开发人员可以并行开发,从而提高效率;
  4. 在系统分析和架构中,分清层次和依赖关系,每个层次不是直接向其上层提供服务(即不是直接实例化在上层中),而是通过定义一组接口,仅向上层暴露其接口功能,上层对于下层仅仅是接口依赖,而不依赖具体类。系统灵活性增强,当下层需要改变时,只要接口及接口功能不变,则上层不用做任何修改。甚至可以在不改动上层代码时将下层整个替换掉。
  5. 可以降低耦合。
  6. 对扩展开放,对修改关闭。

使用场景:

      系统集成;前后台调用。增、删、改、查定义时注意,增加应该返回新对象的信息;删除数据时参数中不能出现lang和userId等当前用户信息,而且返回值应该定义一个统一的格式,就是ResultBean,分页是PageResultBean;修改的返回值应该考虑失败的情况,参数应该定义对应的bean;查询的返回值是单个对象还是List集合。

在常见的三层架构中,

  • 界面层

也就是展示层,直接呈现给用户的,可能不同的软件有不同的呈现方式,比如Web,WinForm,甚至移动APP,在这个层次,我认为是没有必要写太多的接口。

  • 业务逻辑层

这个层次,业务逻辑,可以根据需要使用接口。如果是直接读写数据库什么的,就直接用调用数据库访问层的接口。如果是与多个第三方接口进行交互,那么就需要接口,不同的渠道各自实现。

  • 数据访问层

数据访问层,最好使用接口,比如数据库访问,这种可以根据不同的数据库实现相应的接口向业务逻辑层提供服务。

可能在开发的时候,一开始我们并没有想到要使用接口。可能简单就用一个类实现了。到后面新的需求过来的时候,发现代码需要重构,要用接口和抽象类等等。这个也需要看个人编码的习惯。有的人就长篇大论一个类完成所有的逻辑。这样的开发人员,应该是很少见过好的代码,如果见过的话,后面肯定会精简做到更好。而另外一些人可能一开始就能嗅出来哪些地方需要使用接口,哪些地方使用抽象类,这也是一种思维方式。前面一种只管开发当前的功能。而后面一种则会考虑到以后的扩展。总而言之,需要根据不同的情况进行考虑。


接口的特点(与抽象类的区别):

  • 接口:
  1. 完全是抽象的,没有方法实现;
  2. 子类使用implements关键字来实现接口,并且需要实现接口中所有声明的方法;
  3. 接口不能有构造器;
  4. 接口方法默认只能是public abstract ,成员变量默认是public static final修饰;
  5. 没有main方法,因此不能运行;
  6. 接口只可以继承一个或多个其他接口;
  7. 如果你想实现多重继承,那么你必须使用接口。由于java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。接口还可以继承多个其他接口。
  • 抽象类:(是对一种事物的抽象,是子类通用特性的模板)
  1. 可以有默认的方法实现;
  2. 子类使用extends关键字来继承抽象类,如果子类不是抽象类,它需要提供抽象类中所有声明的方法的实现;
  3. 可以有构造器;不能被实例化;
  4. 抽象方法可以有public、protected和default修饰符;
  5. 有main方法,可以运行;
  6. 抽象方法可以继承一个类和实现多个接口;
  7. 如果你拥有一些方法并想让它们中的一些有默认实现,那么使用抽象类吧,如果基本功能在不断改变,那么就需要使用抽象类。

注意:从 Java 8 开始,接口也可以拥有默认的方法实现,这是因为不支持默认方法的接口的维护成本太高了。在 Java 8 之前,接口可以看成是一个完全抽象的类,也就是说它不能有任何的方法实现。如果一个接口想要添加新的方法,那么要修改所有实现了该接口的类。


如有错误,欢迎留言指正  * _ *

猜你喜欢

转载自blog.csdn.net/jingzhi111/article/details/86748753
今日推荐