JavaSE-11 接口

学习要点

  • 接口的定义
  • 接口作为约定
  • 接口作为能力

 

  

接口

为什么使用接口

需求描述

要求实现防盗门的功能(防盗门:带锁的门)。

需求分析

  1. 门有“开”和“关”的功能,锁有“上锁”和“开锁”的功能。
  2. 将门和锁分别定义为抽象类。
  3. 防盗门继承门,再继承锁,能够实现吗?//只支持单继承
  4. Java只支持单继承。
  5. 如何解决这个问题?

解决方案

将门定义为抽象类,锁定义为接口。防盗门继承门,实现锁的接口。

 

接口的定义

语法结构

public interface MyInterface {

    public void foo();

    //其他方法

}

  

接口中的方法都是public abstract方法,没有方法体。

 

接口特性

  1. 接口不可以被实例化
  2. 实现类必须实现接口的所有方法
  3. 实现类可以实现多个接口
  4. 接口中的变量都是静态常量

接口使用场合

  1. 常作为类型使用
  2. 实现Java的“多继承”

 

接口的使用

如何用程序描述USB接口

 

 

问题分析

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

 

使用Java接口实现

 

编码实现

  

 

接口表示一种能力

能力

  • 做这项工作需要一个程序员(电气工程师、泥瓦匠,木匠……),程序员在这里表示一种能力,而不关心具体是谁。
  • 接口是一种能力,体现在接口的方法上。

 

面向接口编程

我们在设计程序的时候:

  • 关心实现类有何能力,而不关心实现细节。
  • 面向接口的约定而不考虑接口的具体实现

 

接口作为能力实现防盗门的编程

问题分析

防盗门是一个门:防盗门和门是 is a 的关系。

防盗门有一个锁:防盗门和锁是 has a 的关系。

锁:上锁和开锁的能力。

实现过程

 

上机练习:扩展防盗门,增加门铃功能,门铃可以播放提示音、对出入门的人和物进行拍照存档。

 

 

理解接口作为一种能力

接口有比抽象类更好的特性:

  1. 可以被多继承
  2. 设计和实现完全分离
  3. 更自然的使用多态
  4. 更容易搭建程序框架
  5. 更容易更换实现
  6. ……

 

 

接口表示一种约定

约定

现实生活中的约定

我们使用的两相电源插座,规定了

  • 两个接头间的额定电压
  • 两个接头间的距离
  • 接头的形状

 

接口是一种约定

体现在接口的名称和注释上

  • 有些接口只有名称
  • 方法的实现方式通过注释来约定

 面向接口编程

  • 程序设计时面向接口的约定而不考虑具体实现。

 

面向接口编程

案例:开发打印机

  • 墨盒:彩色、黑白
  • 纸张类型:A4、B5
  • 墨盒和纸张都不是打印机厂商提供的
  • 打印机厂商要兼容市场上的墨盒、纸张

 

分析

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

 

 

总结

Java中的接口

属性全都是全局静态常量

方法都是全局抽象方法

无构造方法

一个类可以实现多个接口,非抽象类实现接口时必须实现接口中的全部方法

抽象类利于代码复用,接口利于代码维护

转载于:https://www.cnblogs.com/rask/p/8253727.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值