1.什么是接口?

官方概述:
在java语言中,接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义。
这种技术主要用来描述类具有什么功能,而并不给出每个类的具体实现。
Balabalabala……..

博主概述:接口是类的行为的抽象概述。

你的概述:用一句你自己能听懂的话,将接口的概念概括一下,然后记在心里。(不必太复杂,不必特准确,重点是你自己一定要理解这句话!)

举个栗子:
在项目开发MVC分层的结构中,在Service层,我们常常使用到接口的方式。
例如:我们编写一个关于订单的Service;
步骤是:先创建一个接口,再编写其接口实现类。
在定义接口方法时,将各种“行为”抽象成方法,此处:创建,查询,取消,完结,支付均是行为!

public interface OrderService {

    /**
* 创建订单
*/
OrderDTO create(OrderDTO orderDTO); /**
* 查询单个订单
*/
OrderDTO findOne(String orderId); /**
* 查询订单列表
*/
Page<OrderDTO> findList(String openId, Pageable pageable); /**
* 取消订单
*/
OrderDTO cancel(OrderDTO orderDTO); /**
* 完结订单
*/
OrderDTO finish(OrderDTO orderDTO); /**
* 支付订单
*/
OrderDTO paid(OrderDTO orderDTO);
}

所以说,我们已经知道了我们将要去干什么,但至于怎么干,具体的怎么做,我们交给接口的实现类去做!

2.使用接口的好处

可扩展性好

       比如项目需要做一个订单模块,首先后端leader创建了一个订单的接口(定义了规范),然后把该接口具体怎么实现交给了小a来做,小a开始进行实现类的编写(接口的第一个实现类),但是过了很久以后,后端leader觉得小a写的这个实现类不太满意,想找人重新写订单模块。那么此时,接口的可扩展性就体现了出来,领导找到了小b,而小b只需要根据该接口重新创建一个类(接口的第二个实现类),并将该订单接口定义的所有方法重新实现一遍,就达到了重写订单模块的目的。而项目其他部分对订单模块的引用并不受到影响,因为其他模块对订单模块引用的是“接口”,而不是具体的实现类。

 

举个栗子:

Service层:

订单接口 :OrderService

订单接口实现类 : OrderServiceImpl

Controller层:

private OrderService orderService;(对Service层的调用)

此处注意:声明的是接口,而不是其实现类,你理解了吗?

接口的多实现是Java多态的一种表现;

3.使用接口的注意点

自上而下分析(我个人的一个小技巧,先考虑是否是类和其关键字,然后按照类的组成部分,自上而下:构造器,域,方法,然后与其相关的类;按照这种规律来进行分析,屡试不爽)

1.接口不是类

2.接口关键字:interface     类实现接口关键字:implements

3.接口没有构造方法

4.接口不能被实例化

5.接口的成员变量都是public,static,final修饰(默认)

6.接口的方法都是public,abstract修饰(默认)(1.8以后方法可以加static关键字,但必须有方法体)

7.接口的实现类必须实现接口所有的方法

4.接口与抽象类的区别?

依旧自上而下分析

1.抽象类是类,接口不是类。(感觉自己说了句废话)

2.抽象类的关键字是abstract修饰,接口的关键字是interface修饰。(感觉自己又说了句废话)

3.抽象类有构造方法,接口没有构造方法。(但两者均不能被实例化,用我自己的话来概括就是,两者都是抽象派,没有具体的实际行为,所以不允许它们实例化!)

4.抽象类的成员变量修饰随便(public,private,protected等等),接口的成员变量必须是public,static,final修饰(默认)(可以用来做定义常量的类)

5.抽象类的方法可以是普通方法,也可以是抽象方法。接口的方法必须是public,abstract修饰(默认)(1.8以后方法可以加static关键字,但必须有方法体)

6.抽象类的所有方法需要被子类全部实现(有一种情况例外,除非子类也是抽象类,其实就是把实现的责任又传递了下去);

 接口的所有方法必须被它的实现类全部实现(没有例外)

7.最重要的一点,此处画重点,抽象类是单继承,接口是多实现;


接口与抽象类的使用场景:

  抽象类是对本质属性的抽象;

    举个栗子:

    父抽象类:人          子类:男人

     接口是对行为的抽象;

    举个栗子:

    接口中的一个方法:创建订单()     实现类1: 第一种具体的创建过程      实现类2:第二种具体的创建过程

 


如果此时的你,还是不太明白接口到底是什么,那我再举一个可能不太恰当的例子:

接口,顾名思义,它是个口,hahh,现在,低下你的头,把你电脑的USB插入口想象成是一个接口,这个接口可以插入三星的U盘,可以插入闪迪的U盘,可以插入8g的,也可以插入16g的,但是有一个重要前提:这些U盘需要满足这个接口所定义的规范,而接口的另一端。电脑内部直接对接的是接口,而不是这些U盘(接口实现类)。


第一次写博客,如果有哪里写的不对,不够严谨,希望大家多多指正,我会认真反思。

最后, 浮于表面看千遍,不如自己思一遍!

希望这篇文章对你能够起到帮助!

 

Java中的接口(什么是接口,接口的好处,具体的使用)的更多相关文章

  1. Java中的集合(十三) 实现Map接口的Hashtable

    Java中的集合(十三) 实现Map接口的Hashtable 一.Hashtable简介 和HashMap一样,Hashtable采用“拉链法”实现一个哈希表,它存储的内容是键值对(key-value ...

  2. Java中的集合(十一) 实现Map接口的TreeMap

    Java中的集合(十一) 实现Map接口的TreeMap 一.TreeMap简介(基于JDK1.8) TreeMap是基于红黑树数据结构,是一个key-value的有序集合,该映射根据其键的自然顺序进 ...

  3. java中的异步处理和Feature接口(一)

    背景介绍想象这样一个场景:你可能希望为你的法国客户提供指定主题的热点报道.为实现这一功能,你需要向 谷歌或者Twitter的API请求所有语言中针对该主题最热门的评论,可能还需要依据你的内部算法 对它 ...

  4. Java学习--java中的集合框架、Collection接口、list接口

    与数组相比:1.数组的长度固定,而集合的长度可变2.数组只能通过下表访问元素,类型固定,而有的集合可以通过任意类型查找所映射的具体对象 java集合框架:collection(list序列,queue ...

  5. java中并不是任意多个接口都可以实现多实现

    interface A{ public abstract void show(); } interface B{ public abstract int show(); } public class ...

  6. [转]java 中的序列化是什么意思?有什么好处?

    1.序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来.虽然你可以用你自己的各种各样的方法来保存Object States,但是Java给你提供一种应该比 ...

  7. java中的接口interface

    关于接口 接口描述了实现了它的类拥有什么功能.因为Java是强类型的,所以有些操作必须用接口去约束和标记.接口作为类的能力的证明,它表明了实现了接口的类能做什么. 类似与class,interface ...

  8. Java中抽象类和接口的用法和区别

    一.抽象类 1.抽象类 包含一个抽象方法的类就是抽象类 2.抽象方法 声明而未被实现的方法,抽象方法必须使用abstract关键词字声明 public abstract class People { ...

  9. Java中使用Observer接口和Observable类实践Observer观察者模式

    在Java中通过Observable类和Observer接口实现了观察者模式.实现Observer接口的对象是观察者,继承Observable的对象是被观察者. 1. 实现观察者模式 实现观察者模式非 ...

  10. 关于Java中继承多接口同名方法的问题

    在Java中如果一个类同时继承接口A与B,并且这两个接口中具有同名方法,会怎么样? 动手做实验: interface A{ void fun(); } interface B{ void fun(); ...

随机推荐

  1. 基础知识:Mysql基本操作命令

    启动mysql :  mysql -hlocalhost -uroot -p 创建数据库:create database 数据库名字; 指定要操作的数据库:use 数据库名字; 查看数据表建表语句:s ...

  2. netcore 基于 DispatchProxy 实现一个简单Rpc远程调用

    前言 netcore 发布以来,一直很关注netcore的进程.目前在公司负责的网站也历经波折的全部有.net framework 4.0 全部切换到netcore 2.2 版本中.虽然过程遇到的坑不 ...

  3. eclipse wifi 连接手机

    参考:http://blog.csdn.net/onlyonecoder/article/details/9121397 首先打开手机的wifi设置,使其连接到网络.然后,需要在手机上对adb连接端口 ...

  4. 使用java程序作为celery的工作节点

    celery是python实现的分布式调度框架,有时候想用celery去调用java服务,正好有一个celery-java的库可以使用,能达到这个效果,记录一下: 先添加依赖: <depende ...

  5. charles 禁用缓存

    本文参考:charles 禁用缓存 No caching Settings/无缓存工具的用法 弹窗面板上一句话概括了他的工作原理:通过修改请求和响应头来防止缓存; 无缓存工具 无缓存工具阻止客户端应用 ...

  6. STM32的RTC中断标志只能手动清除

    背景: 最近在做一个stm32的项目,其中用到RTC的实时时钟功能.时钟源采用外部32.768K晶振,时钟预分频设置为32767,目的是为了产生1秒的中断,然后在中断处理函数中更新实时年月日时分秒. ...

  7. 《Ansible自动化运维:技术与最佳实践》第三章读书笔记

    Ansible 组件介绍 本章主要通过对 Ansible 经常使用的组件进行讲解,使对 Ansible 有一个更全面的了解,主要包含以下内容: Ansible Inventory Ansible Ad ...

  8. 实现一个正则表达式引擎in Python(二)

    项目地址:Regex in Python 在看一下之前正则的语法的 BNF 范式 group ::= ("(" expr ")")* expr ::= fact ...

  9. 11-常用SQL总结

    1.设置表的列不能为nullalter table run.dbo.T1 alter column Col1 int not null 2.给表添加主键alter table run.dbo.T1 a ...

  10. 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU硬件那些事(1)- 官方EVK简介

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RTyyyy系列MCU的配套EVK板. 半导体设计厂商发布任何一块MCU芯片新品,一般都会同步推出基于这款MCU的配套 ...