Java中的接口其实就是一套“标准”或者“规范”,比如使用接口实现【电脑对鼠标、键盘使用USB接口的管理】,鼠标和键盘他们与接口之间并不存在子类和父类的关系,但是鼠标和键盘又都要通过USB接口插入电脑,如果没有一个统一的规范,那么电脑该怎么识别呢?所以就需要一个“标准”来统一约束鼠标和键盘的使用规则,下面来举一个小例子:

 public interface USB {
void work();
} class Keyboard implements USB{
@Override
public void work() {
System.out.println("这里是键盘实现USB的方法");
}
} class Mouse implements USB{
@Override
public void work() {
System.out.println("这里是鼠标实现USB的方法");
}
} class computer {
void computerStart(){
System.out.println("--电脑启动");
} void computerStop(){
System.out.println("--电脑关闭");
}
void useUSB(USB usb){
USB u = usb;
u.work();
}
} class TestUsB {
public static void main(String[] args) {
computer computer = new computer();
computer.computerStart();
computer.useUSB(new Keyboard());
computer.computerStop(); }
}

在这里就统一定义了一个USB的接口标准,这个标准就定义了一个方法work(),这个USB接口就是电脑上的USB接口,不管什么设备,如果想要通过这个USB接口连接我的电脑,都要按照我的一个规定来做,这个规定就是这个work方法,但是为什么这里只是定义了一个方法而没有具体实现呢?因为电脑的USB接口并不知道要插入的设备是谁,所以就事先写了一个“合同”放在这里,这个合同是空白的,如果有设备要通过“我”来连接电脑,那就把这个协议拿走,自己在上面签订一个协议。

 public interface USB {
2   void work();
3 }

比如:现在键盘要通过USB连接电脑,键盘就需要把那份“协议”拿过来,然后在上面写下信息,表示“遵守约定”,所以就写成:class Keyboard 通过implements关键字去遵循 USB的约定,并且把USB的一个协议(  work方法 )拿过来在上面写下约定。这就是 实现接口,然后重写接口的方法。

 class Keyboard implements USB{
@Override
public void work() {
System.out.println("这里是键盘实现USB的方法");
}
}

在比如说,这里又有一个鼠标也要通过USB连接电脑,所以它也要通过 implements关键字去遵循 USB的约定,然后把USB的一份协议拿过来,在上面签订这份协议,(我只是打印一句话,来区分是哪个设备)

 class Mouse implements USB{
@Override
public void work() {
System.out.println("这里是鼠标实现USB的方法");
}
}

现在是测试两个设备通过USB来连接电脑,既然要使用电脑,肯定要建立一个电脑的实体,就是new一个电脑,电脑本身也有很多功能,比如开启电脑、关闭电脑、在电脑上一系列的操作等等,还有一个功能就是要使用USB的功能,因为要通过这个USB来连接外部设备,所以在这里定义一个方法:useUSB(USB usb),这个方法的参数接收的是一个USB类型的对象,因为电脑要通过这个借口连接很多设备,还没有连接之前,并不知道要连接的是哪一个,所以就事先定义一个USB标准的对象,因为所有能连接电脑的设备都遵循了这一标准,没有遵循这个标准的(没有在USB这个标准上签订协议的)都不能连接电脑。

 class computer {
void computerStart(){
System.out.println("--电脑启动");
} void computerStop(){
System.out.println("--电脑关闭");
}
void useUSB(USB usb){
USB u = usb;
u.work();
}
}

电脑、鼠标、键盘类以及接口标准也定义好了,接下里就是用户来使用电脑了,看看到底这个电脑能不能通过我们刚才定义的接口标准来使用鼠标或者键盘,看下面代码,首先要使用电脑,就需要通过new关键字创建一个电脑的实体,然后才能真正使用,通过调用电脑的computer.computerStart();方法,以及computer.computerStop();方法,是测试电脑的这两个功能,可以打印电脑“电脑启动”和“电脑关闭”功能,下面我们通过使用电脑的computer.useUSB(new Keyboard()); 这个功能来插入个(就是New 一个)设备。

 class TestUsB {
public static void main(String[] args) {
computer computer = new computer();
computer.computerStart();
computer.useUSB(new Keyboard()); /
computer.computerStop();
}
}

上面的代码就是测试一下键盘,就是插入一个键盘,此时会调用电脑的useUSB(USB usb)这个方法,就是使用USB方法,当插入一个键盘是,这里就会接收到一个键盘的对象,因为键盘已经在上面“签订了USB标准”,所以USB是识别的,并且是认识的,所以看到他之后,立即调用键盘之前签订的那个协议,并且通过键盘的work方法把键盘的功能调用过来。那么这里就实现了使用键盘的功能。如果测试类里通过new 一个鼠标对象,这里的USB标准会识别出“这个是鼠标,调用鼠标的方法”。这个其实是一个多态的使用。

    void useUSB(USB usb){
2 USB u = usb;
3 u.work();
4 }

最终打印输出如下图所示:

以上就是通过一个小的例子来说明JAVA中接口的使用方法,您如果觉得对您的理解有帮助的话,请帮忙准发分享一下,能帮助更多的人来理解接口

Java接口讲解的更多相关文章

  1. 对接第三方平台JAVA接口问题推送和解决

    前言 本节所讲为实际项目中与第三方对接出现的问题最后还是靠老大解决了问题以此作为备忘录,本篇分为三小节,一小节解析Java加密接口数据,二小节解析XML文件需注意问题,最后一节则是请求Java Soa ...

  2. java 接口详解

    定义接口 接口继承和实现继承的规则不同,一个类只有一个直接父类,但可以实现多个接口.Java 接口本身没有任何实现,只描述 public 行为,因此 Java 接口比 Java 抽象类更抽象化.Jav ...

  3. Apache Solr 初级教程(介绍、安装部署、Java接口、中文分词)

    Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...

  4. Java接口 详解(二)

    上一篇Java接口 详解(一)讲到了接口的基本概念.接口的使用和接口的实际应用(标准定义).我们接着来讲. 一.接口的应用—工厂设计模式(Factory) 我们先看一个范例: package com. ...

  5. java集合讲解

    java集合讲解 1.概述 集合类的顶级接口是Iterable,Collection继承了Iterable接口 常用的集合主要有 3 类,Set,List,Queue,他们都是接口,都继于Collec ...

  6. java接口调用——webservice就是一个RPC而已

    很多新手一听到接口就蒙逼,不知道接口是什么!其实接口就是RPC,通过远程访问别的程序提供的方法,然后获得该方法执行的接口,而不需要在本地执行该方法.就是本地方法调用的升级版而已,我明天会上一篇如何通过 ...

  7. java 接口的作用和好处

    1.java 接口的作用 http://blog.csdn.net/hack_bug/article/details/7634737 2.一位Java大牛的回答 很多JAVA初级程序员对于接口存在的意 ...

  8. java接口

    一.定义 Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为( ...

  9. java接口的嵌套

    java接口 1.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值 2.接口中的方法默认都是 public abstract ...

随机推荐

  1. 08 vi全屏文本编辑器

    打开文件vim /path/to/somefilevim +# :打开文件,并定位于第#行(如下的 vi +33 profile) vim +:打开文件,定位至最后一行vim +/PATTERN : ...

  2. Vue watch 深层监听

    Vue中监听某个对象的属性 为了避免监听整个对象导致效率问题,可以监听某个对象的特定属性 watch: { 'deptModel.depts': { handler(newVal, oldVal) { ...

  3. centos环境 使用kubeadm快速安装k8s集群v1.16.2

    全程使用root用户运行,宿主机需要连接外网 浏览一下官方kubeadm[有些镜像用不了] https://kubernetes.io/docs/setup/production-environmen ...

  4. Linux学习笔记 一 第三章 Linux常用命令

    第三章Linux常用命令 一.文件处理命令 1.命令格式 2.目录处理命令:ls 3.目录处理命令:mkdir 4.文件处理命令: touch

  5. 掌握提高 Web 应用的性能的方法 之 优化 PHP 和 Laravel

    Laravel 有很多东西.但是快不是其中之一.让我们学习一些优化技巧,以加快运行速度! 自从 Laravel 诞生以来,没有一个 PHP 开发人员不受她的影响.他们是喜欢 Laravel 提供的快速 ...

  6. unity探索者之iOS微信登录、分享

    版权声明:本文为原创文章,转载请声明http://www.cnblogs.com/unityExplorer/p/8405700.html iOS接入微信的SDK相对于安卓要麻烦一点,除了核心功能代码 ...

  7. leetcode刷题记录——字符串

    242.有效地字母异位词 由于本题的字符串只包含 26 个小写字符,因此可以使用长度为 26 的整型数组对字符串出现的字符进行统计,并对比字母出现的次数是否一致.不再使用 HashMap. toCha ...

  8. Spring注解驱动开发01(组件扫描使用详解)

    使用Spring注解代替XML的方式 以前都是通过xml配bean的方式来完成bean对象放入ioc容器,即使通过@Aotuwire自动装配bean,还是要创建一个xml文件,进行包扫描,显得过于繁琐 ...

  9. Java数据结构——图的基本理论及简单实现

    1. 图的定义图(graph)是由一些点(vertex)和这些点之间的连线(edge)所组成的:其中,点通常被成为"顶点(vertex)",而点与点之间的连线则被成为"边 ...

  10. 高并发&性能优化(一)------总体介绍

    [开篇词] 本文主要通过一些经典的高并发场景,以及一些基本的运维工具来讲述一些关于高并发以及性能优化相关的内容,主要包括性能瓶颈的定位,性能调优的思路和技巧等. [性能的衡量指标] ?什么是性能 性能 ...