JavaSE-11 接口
学习要点
- 接口的定义
- 接口作为约定
- 接口作为能力
接口
为什么使用接口
需求描述
要求实现防盗门的功能(防盗门:带锁的门)。
需求分析
- 门有“开”和“关”的功能,锁有“上锁”和“开锁”的功能。
- 将门和锁分别定义为抽象类。
- 防盗门继承门,再继承锁,能够实现吗?//只支持单继承
- Java只支持单继承。
- 如何解决这个问题?
解决方案
将门定义为抽象类,锁定义为接口。防盗门继承门,实现锁的接口。
接口的定义
语法结构
public interface MyInterface {
public void foo();
//其他方法
}
接口中的方法都是public abstract方法,没有方法体。
接口特性
- 接口不可以被实例化
- 实现类必须实现接口的所有方法
- 实现类可以实现多个接口
- 接口中的变量都是静态常量
接口使用场合
- 常作为类型使用
- 实现Java的“多继承”
接口的使用
如何用程序描述USB接口

问题分析
USB接口:本身没有实现任何功能、规定了数据传输的要求、可以被多种USB设备实现。
使用Java接口实现

编码实现

接口表示一种能力
能力
- 做这项工作需要一个程序员(电气工程师、泥瓦匠,木匠……),程序员在这里表示一种能力,而不关心具体是谁。
- 接口是一种能力,体现在接口的方法上。
面向接口编程
我们在设计程序的时候:
- 关心实现类有何能力,而不关心实现细节。
- 面向接口的约定而不考虑接口的具体实现
接口作为能力实现防盗门的编程
问题分析
防盗门是一个门:防盗门和门是 is a 的关系。
防盗门有一个锁:防盗门和锁是 has a 的关系。
锁:上锁和开锁的能力。
实现过程

上机练习:扩展防盗门,增加门铃功能,门铃可以播放提示音、对出入门的人和物进行拍照存档。
理解接口作为一种能力
接口有比抽象类更好的特性:
- 可以被多继承
- 设计和实现完全分离
- 更自然的使用多态
- 更容易搭建程序框架
- 更容易更换实现
- ……
接口表示一种约定
约定
现实生活中的约定
我们使用的两相电源插座,规定了
- 两个接头间的额定电压
- 两个接头间的距离
- 接头的形状
接口是一种约定
体现在接口的名称和注释上
- 有些接口只有名称
- 方法的实现方式通过注释来约定
面向接口编程
- 程序设计时面向接口的约定而不考虑具体实现。
面向接口编程
案例:开发打印机
- 墨盒:彩色、黑白
- 纸张类型:A4、B5
- 墨盒和纸张都不是打印机厂商提供的
- 打印机厂商要兼容市场上的墨盒、纸张

分析
- 墨盒和纸张的规格是一种约定
- 打印机需要遵守这些约定
- 用面向接口编程的方式开发
- 制定墨盒、纸张的约定或标准
- 打印机厂商使用墨盒、纸张的标准开发打印机
- 其他厂商按照墨盒、纸张的标准生产墨盒、纸张

总结
Java中的接口
属性全都是全局静态常量
方法都是全局抽象方法
无构造方法
一个类可以实现多个接口,非抽象类实现接口时必须实现接口中的全部方法
抽象类利于代码复用,接口利于代码维护
JavaSE-11 接口的更多相关文章
- ionic访问odoo 11接口
在架设完毕odoo 11的网站之后,第一次面临手机app该如何访问后台网站的问题,是不是模式类似asp.net mvc 那样的模式,或者还存在其他的访问方法,带着这个疑问与困惑,开始的我的研究学习之路 ...
- javase(11)_juc并发库
一.传统线程技术 public static void main(String[] args) { Thread thread = new Thread(){ @Override public voi ...
- java基础(11):接口、多态
1. 接口 1.1 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成. ...
- C#-11 接口
一 什么是接口 接口是指定一组函数成员而不实现它们的引用类型. class Program { static void FlyFunc(IFly obj) { obj.Fly(); } static ...
- 11_Java面向对象_第11天(接口、多态)_讲义
今日内容介绍 1.接口 2.多态 01接口的概念 * A:接口的概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的"类". 接口只描述所应该具备的方法,并没有具 ...
- Java 11 Tutorial
Java 11 Tutorial 参考 https://blog.csdn.net/sihai12345/article/details/82889827 原文 https://winterbe.co ...
- 教你查阅Java API 英文文档(JDK 11)
JAVA Document:https://docs.oracle.com/en/java/javase/11/ 然后找到“Specifications”并点击 API Documentation 比 ...
- TypeScript:基本类型和接口
返回TypeScript手册总目录 基本类型(Basic Types) 为了让程序可以使用,我们需要用到一些最简单的数据单元:数字,字符串,结构,布尔值,诸如此类.在TypeScript中,支持许多正 ...
- shopncv4 短信接口 提供商 中国短信网
前提是在后台开启手机注册功能:具体是在设置->账号同步->手机短信 里开启. 修改 siteroot\core\framework\libraries\sms.php 修改 sit ...
- php抽象类和接口的区别
php抽象类和接口的区别 tags:抽象类 接口 抽象类和接口 php 引言:这是一个面试经常被问到的问题,也是一个经典问题.我们尽量引用官方权威的说明或者经过实验来证明本文所说的内容准确性. 抽象类 ...
随机推荐
- BZOJ_3172_[Tjoi2013]单词_AC自动机
BZOJ_3172_[Tjoi2013]单词_AC自动机 Description 某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次. ...
- .NETFramework:MemoryStream
ylbtech-.NETFramework:MemoryStream 1.返回顶部 1. #region 程序集 mscorlib, Version=4.0.0.0, Culture=neutral, ...
- 【插件开发】—— 14 Site is incorrect!编辑器启动报错!
前言 博文纵览 最近在弄编辑器的时候出现了一个十分尴尬的错误!这里收录一下: BUG如下图所示: 目测堆栈,与自己开发的代码无关.完全是Eclipse自己初始化的时候遇到了问题,最头疼的就是这种问题. ...
- spring boot启动报错Error starting ApplicationContext(未能配置数据源)
主要错误:Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource c ...
- [Swift]编程语言:文档修订历史
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- [POI2009]Tab
Description 2个n\(\times\)m矩阵,保证同一个矩阵中元素两两不同.问能否通过若干次交换两行或交换两列把第一个矩阵变成第二个. Input 第一行正整数T(1≤T≤10)表示数据组 ...
- Selenium2工作原理
Selenium 经历了两个版本,Selenium 1.0 和 Selenium 2.0,本文仅介绍Selenium2的原理,在Selenium 2.0 主推的是WebDriver,Selenium2 ...
- D. Arpa's weak amphitheater and Mehrdad's valuable Hoses 分组背包模板题
http://codeforces.com/problemset/problem/742/D 并查集预处理出所有关系. 一开始的时候,我预处理所有关系后,然后选择全部的时候,另起了一个for,然后再判 ...
- jmeter正则表达式提取器使用
引用名称:请求中的参数需要引用的名称 正则表达式:从结果集中提取数据,例如从数据库查询结果中提取数据 模板:$1$表示提取表达式中的第一个值,$n$以此类推 匹配数字:0代表随机,1代表第一个值,n代 ...
- ListView相关知识点
最近开发接触到了ListView控件,其实简单的需求基本上源生的都可以满足,下面总结一下开发过程中所遇到的关键点: 1.多级ListView联动,保存位置:即切换第一层ListView的item过程中 ...
