第六章:接口
系列文章目录
文章目录
- 系列文章目录
- 前言
- 一、接口
- 二、实现接口与继承类
- 三、接口的多态特性
- 总结
前言
接口是更加抽象的类。
一、接口
usb插槽就是现实中的接口,厂家都遵守了统一的规定包括尺寸,排线等。这样的设计在java编程中也是大量存在的。
package com.hspedu.interface_;public interface UsbInterface { //接口//规定接口的相关方法,老师规定的.即规范...public void start();public void stop();
} package com.hspedu.interface_;public class Camera implements UsbInterface{//实现接口,就是把接口方法实现@Overridepublic void start() {System.out.println("相机开始工作...");} @Overridepublic void stop() {System.out.println("相机停止工作....");}
}package com.hspedu.interface_;//Phone 类 实现 UsbInterface
//解读 1. 即 Phone 类需要实现 UsbInterface 接口 规定/声明的方法
public class Phone implements UsbInterface {@Overridepublic void start() {System.out.println("手机开始工作...");} @Overridepublic void stop() {System.out.println("手机停止工作.....");}
}package com.hspedu.interface_;public class Interface01 {public static void main(String[] args) {//创建手机, 相机对象//Camera 实现了 UsbInterfaceCamera camera = new Camera();//Phone 实现了 UsbInterfacePhone phone = new Phone();//创建计算机Computer computer = new Computer();computer.work(phone);//把手机接入到计算机System.out.println("===============");computer.work(camera);//把相机接入到计算机}
}
接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,在根据具体情况把这些方法写出来。
//语法形式
interface 接口
{//属性//方法//比如:public void eat();
}class 类名 implements 接口
{//自己属性//自己方法//必须实现的接口的抽象方法
}
接口本质 |
---|
接口就是更加抽象的类,抽象类里的方法可以有方法体,接口里的所有方法都没有方法体【JDK7.0】 |
接口体现了程序设计的多态和高内聚低耦合的设计思想 |
【JDK8.0】后接口可以有静态方法,成员方法,也就是说接口中可以有方法的具体实现 |
package com.hspedu.interface_;public interface DBInterface { //项目经理public void connect();//连接方法public void close();//关闭连接
} package com.hspedu.interface_;//A 程序
public class MysqlDB implements DBInterface {@Overridepublic void connect() {System.out.println("连接 mysql");} @Overridepublic void close() {System.out.println("关闭 mysql");}
}package com.hspedu.interface_;//B 程序员连接 Oracle
public class OracleDB implements DBInterface{@Overridepublic void connect() {System.out.println("连接 oracle");} @Overridepublic void close() {System.out.println("关闭 oracle");}
} package com.hspedu.interface_;public class Interface03 {public static void main(String[] args) {MysqlDB mysqlDB = new MysqlDB();t(mysqlDB);OracleDB oracleDB = new OracleDB();t(oracleDB);} public static void t(DBInterface db) {db.connect();db.close();}
}
接口使用细则part1 |
---|
1)接口不能被实例化 |
2)接口中所有的方法是public方法,接口中抽象方法,可以不用abstract修饰 |
3)一个普通类实现接口,就必须将该接口的所有方法都实现 |
4)抽象类实现接口,可以不用实现接口的方法 |
package com.hspedu.interface_;public class InterfaceDetail01 {public static void main(String[] args) {//new IA();}
} //1.接口不能被实例化
//2.接口中所有的方法是 public 方法, 接口中抽象方法, 可以不用 abstract 修饰
//3.一个普通类实现接口,就必须将该接口的所有方法都实现,可以使用 alt+enter 来解决
//4.抽象类去实现接口时, 可以不实现接口的抽象方法interface IA {void say();//修饰符 public protected 默认 privatevoid hi();
} class Cat implements IA{@Overridepublic void say() {} @Overridepublic void hi() {}
} abstract class Tiger implements IA {
}
接口使用细则part2 |
---|
5)一个类可以同时实现多个接口 |
6)接口中的属性,只能是final的,而且是public static final 修饰符。比如:int a = 1;实际上是public static final int a = 1;(必须初始化) |
7)接口中的属性的访问形式:接口名.属性名 |
8)接口不能继承其他类,但可以继承多个别的接口 |
9)接口的修饰符 只能是public和默认,这点和类的修饰符是一样的 |
package com.hspedu.interface_;public class InterfaceDetail02 {public static void main(String[] args) {//老韩证明 接口中的属性,是 public static finalSystem.out.println(IB.n1);//说明 n1 就是 static//IB.n1 = 30; 说明 n1 是 final}
} interface IB {//接口中的属性,只能是 final 的, 而且是 public static final 修饰符int n1 = 10; //等价 public static final int n1 = 10;void hi();
} interface IC {void say();
}//接口不能继承其它的类,但是可以继承多个别的接口
interface ID extends IB,IC {} //接口的修饰符 只能是 public 和默认, 这点和类的修饰符是一样的
interface IE{}//一个类同时可以实现多个接口
class Pig implements IB,IC {@Overridepublic void hi() {} @Overridepublic void say() {}
}
二、实现接口与继承类
实现接口和继承类的区别 |
---|
当子类继承了父类,就自动的拥有父类的功能,解决代码的复用性和可维护性 |
如果子类需要扩展功能,可以通过实现接口的方式扩展,设计好各种规范(方法),让其它类去实现这些方法,即更加灵活 |
接口比继承更加灵活,继承是满足is - a的关系,而接口只需满足 like - a的关系 |
可以理解实现接口是对java单继承机制的一种补充,接口在一定程度上实现代码解耦,即接口规范性+动态绑定机制 |
package com.hspedu.interface_;public class ExtendsVsInterface {public static void main(String[] args) {LittleMonkey wuKong = new LittleMonkey("悟空");wuKong.climbing();wuKong.swimming();wuKong.flying();}
} //猴子
class Monkey {private String name;public Monkey(String name) {this.name = name;} public void climbing() {System.out.println(name + " 会爬树...");} public String getName() {return name;}
} //接口
interface Fishable {void swimming();
}
interface Birdable {void flying();
} //继承
//小结: 当子类继承了父类, 就自动的拥有父类的功能
// 如果子类需要扩展功能, 可以通过实现接口的方式扩展.
// 可以理解 实现接口 是 对 java 单继承机制的一种补充.
class LittleMonkey extends Monkey implements Fishable,Birdable {public LittleMonkey(String name) {super(name);} @Overridepublic void swimming() {System.out.println(getName() + " 通过学习, 可以像鱼儿一样游泳...");} @Overridepublic void flying() {System.out.println(getName() + " 通过学习, 可以像鸟儿一样飞翔...");}}
三、接口的多态特性
接口的多态性 |
---|
多态参数:接口引用可以指向实现了接口的类的对象 |
多态数组:数组引用可以指向实现了接口的类的对象 |
多态传递:接口继承父接口可以被接口实现并实现接口的类的引用 |
package com.hspedu.interface_;public class InterfacePolyParameter {public static void main(String[] args) {//接口的多态体现//接口类型的变量 if01 可以指向 实现了 IF 接口类的对象实例IF if01 = new Monster();if01 = new Car();//继承体现的多态//父类类型的变量 a 可以指向 继承 AAA 的子类的对象实例AAA a = new BBB();a = new CCC();}
}interface IF {}
class Monster implements IF{}
class Car implements IF{}
class AAA {}
class BBB extends AAA {}
class CCC extends AAA {}
package com.hspedu.interface_;public class InterfacePolyArr {public static void main(String[] args) {//多态数组 -> 接口类型数组Usb[] usbs = new Usb[2];usbs[0] = new Phone_();usbs[1] = new Camera_();/*给 Usb 数组中, 存放 Phone 和 相机对象, Phone 类还有一个特有的方法 call() ,请遍历 Usb 数组, 如果是 Phone 对象, 除了调用 Usb 接口定义的方法外,还需要调用 Phone 特有方法 call*/for(int i = 0; i < usbs.length; i++) {usbs[i].work();//动态绑定..//和前面一样, 我们仍然需要进行类型的向下转型if(usbs[i] instanceof Phone_) {//判断他的运行类型是 Phone_((Phone_) usbs[i]).call();}}}
} interface Usb{void work();
} class Phone_ implements Usb {public void call() {System.out.println("手机可以打电话...");} @Overridepublic void work() {System.out.println("手机工作中...");}
} class Camera_ implements Usb {@Overridepublic void work() {System.out.println("相机工作中...");}
}
ackage com.hspedu.interface_;/**
* 演示多态传递现象
*/
public class InterfacePolyPass {public static void main(String[] args) {//接口类型的变量可以指向, 实现了该接口的类的对象实例IG ig = new Teacher();//如果 IG 继承了 IH 接口, 而 Teacher 类实现了 IG 接口//那么, 实际上就相当于 Teacher 类也实现了 IH 接口.//这就是所谓的 接口多态传递现象.IH ih = new Teacher();}
}
interface IH {void hi();
}
interface IG extends IH{ }class Teacher implements IG {@Overridepublic void hi() {}
}
总结
接口的使用更多是对类继承的一种补充。
相关文章:
第六章:接口
系列文章目录 文章目录 系列文章目录前言一、接口二、实现接口与继承类三、接口的多态特性总结 前言 接口是更加抽象的类。 一、接口 usb插槽就是现实中的接口,厂家都遵守了统一的规定包括尺寸,排线等。这样的设计在java编程中也是大量存在的。 packa…...

【Java 进阶篇】JQuery DOM操作:CRUD操作的前端魔法
在前端开发的舞台上,CRUD(Create, Read, Update, Delete)操作是一种极为重要的技能,它涉及对页面元素的增删改查。而JQuery,这位前端开发的魔法师,为我们提供了便捷而强大的方法,使得CRUD操作变…...

如何实现Redisson分布式锁
首先,不要将分布式锁想的太复杂,如果我们只是平时业务中去使用,其实不算难,但是很多人写的文章不能让人快速上手,接下来,一起看下Redisson分布式锁的快速实现 Redisson 是一个在 Redis 的基础上实现的 Java…...

Kafka(三)生产者发送消息
文章目录 生产者发送思路自定义序列化类配置生产者参数提升吞吐量 发送消息关闭生产者结语示例源码仓库 生产者发送思路 如何确保消息格式正确的前提下最终一定能发送到Kafka? 这里的实现思路是 ack使用默认的all开启重试在一定时间内重试不成功,则入库ÿ…...

2020年五一杯数学建模C题饲料混合加工问题解题全过程文档及程序
2020年五一杯数学建模 C题 饲料混合加工问题 原题再现 饲料加工厂需要加工一批动物能量饲料。饲料加工需要原料,如加工猪饲料需要玉米、荞麦、稻谷等。加工厂从不同的产区收购了原料,原料在收购的过程中由于运输、保鲜以及产品本身属性等原因ÿ…...

公益SRC实战|SQL注入漏洞攻略
目录 一、信息收集 二、实战演示 三、使用sqlmap进行验证 四、总结 一、信息收集 1.查找带有ID传参的网站(可以查找sql注入漏洞) inurl:asp idxx 2.查找网站后台(多数有登陆框,可以查找弱口令,暴力破解等漏洞&…...

Word软件手动安装Zotero插件
文章目录 Word软件手动安装Zotero插件方法一方法二 参考资料 Word软件手动安装Zotero插件 方法一 关闭word在zotero中依次点击编辑—首选项—引用—文字编辑软件—重新安装加载项Microsoft word 方法二 寻找Zotero.dotm存储位置, 例如D:\Program Files\Zotero\ext…...

idea 插件推荐第二期
文章目录 便捷开发CodeGlance Pro (代码缩略图)GenerateAllSetter(快速生成对象所有set方法)GsonFormatPlus:json转实体RestfulToolkitX(找到controller快捷请求接口) 美化activate-power-mode-x (敲击计数、动效)Nyan…...

plsql查询中文出现乱码
添加环境变量:如下 变量名:NLS_LANG 变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK 变量名:TNS_ADMIN 变量值:D:\instantclient_11_2\network\admin 在Path中添加instantclient_11_2存放路径...

【Docker】五分钟完成Docker部署Java应用,你也可以的!!!
文章目录 前言一、部署步骤1.项目结构2.Dockerfile3.docker-compose.yml4.启动5.常用命令 总结 前言 本文基于Docker Compose部署Java应用,请确保你已经安装了Docker和Docker Compose。 十分钟就能上手docker?要不你也试试? 一、部署步骤 1…...

如何准备2024年的系统设计面试?
1 前言 如果你正在准备软件工程师或软件开发人员的面试,那么你可能知道由于其开放性质和广泛性,准备系统设计是多么困难,但同时你也不能忽略它。在软件工程界,如果你正在申请高级工程师/主管/架构师或更高级别的角色,系统设计是最受追捧的技能,也是整个过程中最重要的环节之一…...

【开源】基于JAVA的电子元器件管理系统
目录 一、摘要1.1 项目简介1.2 项目详细录屏 二、研究内容三、界面展示3.1 登录&注册&主页3.2 元器件单位模块3.3 元器件仓库模块3.4 元器件供应商模块3.5 元器件品类模块3.6 元器件明细模块3.7 元器件类型模块3.8 元器件采购模块3.9 元器件领用模块3.10 系统基础模块 …...

足底筋膜炎怎么治疗治愈
足底筋膜炎又称为跖筋膜炎,跖筋膜主要在足弓下方,它维持足弓稳定性,对于喜欢长期长跑、跳远,或者越野运动,或者部队中的士兵进行拉练,还有需要久坐或者久站的人群中,容易发生跖筋膜炎。治疗方法…...
Keil工程忽略文件.gitignore、自动删除脚本:keilkilll.bat、自动生成目录文件列表脚本
Keil工程忽略文件:.gitignore 忽略规则 *.rar *.o *.d *.crf *.htm *.dep *.map *.bak *.lnp *.lst *.ini *.iex *.sct *.scvd *.dbg* *.uvguix.* *Log.*#忽略.gitignore根目录下的文件夹,根据自己的需要修改 RTE/ Templates/ Examples/ OBJ/#不能忽略…...
软考高级职称哪个好考?明确给你答案
软考考试分为初、中、高三级,其中高级5个方向分别为系统分析师、信息系统项目管理师、网络规划设计师、系统架构设计师、系统规划与管理师。软考高级职称考什么好?有很多人是因为要评高级职称而选择参考软考高级资格考试,那么软考高级里哪个资…...
智能客服外包服务适用于哪些行业?
在当今快节奏的商业环境下,企业需要更高效、更智能且更灵活的客户服务解决方案。而智能客服外包服务正是满足这一需求的利器。不仅可以帮助企业提升客户服务的品质和效率,还能降低企业的运营成本。智能客服外包服务适用于哪些行业呢? 1.电子…...
数字化企业各业务模块模型
1.计划 1.1采购计划执行情况 序号 采购计划号 采购订单号 业务员 供应商 物料 数量 金额 计划入库日期 实际入库日期 状态 针对企业执行中或者未关闭的采购计划进行统计与分析,主要目的在于引领企业员工与领导关注长期在途的采购…...
WPF动画小知识
一、动画合集 创建一个Storyboard演示画板,在画板里对动画进行定义与处理。 常见动画类型 提醒:更多介绍可查看microsoft提供的相关文档 DoubleAnimation //普通Double型控制动画 DoubleAnimationUsingKeyFrames //Dou…...

数据结构 顺序表和链表
1.线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串.. 线性表在逻辑上是线性结构,也就说是连续的一条直线…...

LMI相机配置步骤,使用Gocator2550相机
在此之前可以先浏览我编写的相机SDK通用类和LMISDK,进行配套观看 https://blog.csdn.net/m0_51559565/article/details/134404394 //LMI相机SDK https://blog.csdn.net/m0_51559565/article/details/134403745 //相机通用类1.启动LMI加速器 LMI加速器用于将相机…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...
WEB3全栈开发——面试专业技能点P4数据库
一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库,基于 mysql 库改进而来,具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点: 支持 Promise / async-await…...