Java接口讲解
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接口讲解的更多相关文章
- 对接第三方平台JAVA接口问题推送和解决
前言 本节所讲为实际项目中与第三方对接出现的问题最后还是靠老大解决了问题以此作为备忘录,本篇分为三小节,一小节解析Java加密接口数据,二小节解析XML文件需注意问题,最后一节则是请求Java Soa ...
- java 接口详解
定义接口 接口继承和实现继承的规则不同,一个类只有一个直接父类,但可以实现多个接口.Java 接口本身没有任何实现,只描述 public 行为,因此 Java 接口比 Java 抽象类更抽象化.Jav ...
- Apache Solr 初级教程(介绍、安装部署、Java接口、中文分词)
Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...
- Java接口 详解(二)
上一篇Java接口 详解(一)讲到了接口的基本概念.接口的使用和接口的实际应用(标准定义).我们接着来讲. 一.接口的应用—工厂设计模式(Factory) 我们先看一个范例: package com. ...
- java集合讲解
java集合讲解 1.概述 集合类的顶级接口是Iterable,Collection继承了Iterable接口 常用的集合主要有 3 类,Set,List,Queue,他们都是接口,都继于Collec ...
- java接口调用——webservice就是一个RPC而已
很多新手一听到接口就蒙逼,不知道接口是什么!其实接口就是RPC,通过远程访问别的程序提供的方法,然后获得该方法执行的接口,而不需要在本地执行该方法.就是本地方法调用的升级版而已,我明天会上一篇如何通过 ...
- java 接口的作用和好处
1.java 接口的作用 http://blog.csdn.net/hack_bug/article/details/7634737 2.一位Java大牛的回答 很多JAVA初级程序员对于接口存在的意 ...
- java接口
一.定义 Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为( ...
- java接口的嵌套
java接口 1.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值 2.接口中的方法默认都是 public abstract ...
随机推荐
- Zookeeper学习(一)
一.Zookeeper理解与选举机制 ①Zookeeper理解 概念:Zookeeper 是一个开源的分布式协调服务框架 ,主要用来解决分布式集群中应用系统的一致性问题和数据管理问题 特点:Zooke ...
- C#LeetCode刷题之#290-单词模式(Word Pattern)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3778 访问. 给定一种 pattern(模式) 和一个字符串 s ...
- Flutter 容器 (1) - Center
Center容器用来居中widget import 'package:flutter/material.dart'; class AuthList extends StatelessWidget { ...
- Spring Boot 教程 - MyBatis-Plus
1. Mybatis-Plus简介 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发.提高效率而生. 为什么说Myba ...
- 初始化itable
在InstanceKlass::link_class_impl()方法中完成方法连接后会继续初始化vtable与itable,之前已经介绍过vtable与itable,并且在类解析过程中已经完成了大小 ...
- C++ 不具有继承关系的类之间的显式,隐式转换 2013-07-11 15:41
好久没有写blog了,今天在学习c#的时候看到某一章节 讲类的隐式与显式转换.特此留笔,以供后续参考之用. 关于显式,隐式转换有些争论,说什么不建议隐式转换.但是个人认为非必要,如果有良好的基础书写基 ...
- ArcGIS Pro Add-In插件开发[ArcGIS Pro SDK for .NET]
本文基于 Windows7 + VS2019 + .NET Framework 4.8 + ArcGIS Pro 2.5 开发和撰写. 目录 开发环境配置 获取ArcGIS Pro 安装VS2019 ...
- JavaSwing关于GridBagLayout(网格袋布局)的使用
下面的链接有初步的介绍: https://blog.csdn.net/xietansheng/article/details/72814552 关于GridBagConstraints: GridBa ...
- golang复杂数据结构
1.数组 数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成.因为数组的长度是固定的,因此在Go语言中很少直接使用数组. 数组的每个元素可以通过索引下标来访问,索引下标的范 ...
- unsigned char printf 如何输出
参考链接:https://blog.csdn.net/m0_37362454/article/details/88639668 #include <stdio.h> int main() ...