JavaSE-11 接口
2024-09-01 04:15:40
学习要点
- 接口的定义
- 接口作为约定
- 接口作为能力
接口
为什么使用接口
需求描述
要求实现防盗门的功能(防盗门:带锁的门)。
需求分析
- 门有“开”和“关”的功能,锁有“上锁”和“开锁”的功能。
- 将门和锁分别定义为抽象类。
- 防盗门继承门,再继承锁,能够实现吗?//只支持单继承
- Java只支持单继承。
- 如何解决这个问题?
解决方案
将门定义为抽象类,锁定义为接口。防盗门继承门,实现锁的接口。
接口的定义
语法结构
public interface MyInterface { public void foo(); //其他方法 }
接口中的方法都是public abstract方法,没有方法体。
接口特性
- 接口不可以被实例化
- 实现类必须实现接口的所有方法
- 实现类可以实现多个接口
- 接口中的变量都是静态常量
接口使用场合
- 常作为类型使用
- 实现Java的“多继承”
接口的使用
如何用程序描述USB接口
问题分析
USB接口:本身没有实现任何功能、规定了数据传输的要求、可以被多种USB设备实现。
使用Java接口实现
编码实现
接口表示一种能力
能力
- 做这项工作需要一个程序员(电气工程师、泥瓦匠,木匠……),程序员在这里表示一种能力,而不关心具体是谁。
- 接口是一种能力,体现在接口的方法上。
面向接口编程
我们在设计程序的时候:
- 关心实现类有何能力,而不关心实现细节。
- 面向接口的约定而不考虑接口的具体实现
接口作为能力实现防盗门的编程
问题分析
防盗门是一个门:防盗门和门是 is a 的关系。
防盗门有一个锁:防盗门和锁是 has a 的关系。
锁:上锁和开锁的能力。
实现过程
上机练习:扩展防盗门,增加门铃功能,门铃可以播放提示音、对出入门的人和物进行拍照存档。
理解接口作为一种能力
接口有比抽象类更好的特性:
- 可以被多继承
- 设计和实现完全分离
- 更自然的使用多态
- 更容易搭建程序框架
- 更容易更换实现
- ……
接口表示一种约定
约定
现实生活中的约定
我们使用的两相电源插座,规定了
- 两个接头间的额定电压
- 两个接头间的距离
- 接头的形状
接口是一种约定
体现在接口的名称和注释上
- 有些接口只有名称
- 方法的实现方式通过注释来约定
面向接口编程
- 程序设计时面向接口的约定而不考虑具体实现。
面向接口编程
案例:开发打印机
- 墨盒:彩色、黑白
- 纸张类型:A4、B5
- 墨盒和纸张都不是打印机厂商提供的
- 打印机厂商要兼容市场上的墨盒、纸张
分析
- 墨盒和纸张的规格是一种约定
- 打印机需要遵守这些约定
- 用面向接口编程的方式开发
- 制定墨盒、纸张的约定或标准
- 打印机厂商使用墨盒、纸张的标准开发打印机
- 其他厂商按照墨盒、纸张的标准生产墨盒、纸张
总结
Java中的接口
属性全都是全局静态常量
方法都是全局抽象方法
无构造方法
一个类可以实现多个接口,非抽象类实现接口时必须实现接口中的全部方法
抽象类利于代码复用,接口利于代码维护
最新文章
- js跨域那些事
- db2 bind on luw
- eclipse 本地项目提交到远程库以及从远程库中添加项目 ---git
- 【转】sql里面的split
- Linux Shell编程一
- Unieap3.5Java端常用公用方法
- 李洪强iOS开发之-环信05_EaseUI 使用指南
- Unix/Linux环境C编程入门教程(30) 字符串操作那些事儿
- 【JSP实例】指定用户计数器
- 通过nginx的fastcgi_param来设置环境变量
- Vuejs 安装与配置
- (82)Wangdao.com第十六天_JavaScript 异步操作
- vue引入外部.css文件,webpack将其与.vue中的样式混合打包了,怎么办?
- pycharm汉化补丁
- python八荣八耻
- php位运算 与 或 异或 取反
- 关于virtualenv python环境引用 pycharm相关配置的使用讨论
- UI自动化测试(六)TestNG操作详解
- hdu1232畅通工程(并查集,简单题)
- C语言中do...while(0)的妙用-避免goto
热门文章
- JVM垃圾回收面试题
- zoj 3471(状态压缩DP,类似于点集配对)
- org.springframework.web.struts.DelegatingActionProxy
- 摘抄 - linux 目录结构简介
- layui 添加第三方插件
- IE6 浏览器常见兼容问题 大汇总(23个)[转载]
- 文件系统访问控制ACL设置
- spring boot启动报错Error starting ApplicationContext(未能配置数据源)
- Luogu P2458 [SDOI2006]保安站岗【树形Dp】
- centos 7更换阿里源