Java面向对象之接口——interface

什么是接口

一般计算机中的接口分为硬件接口和软件接口。

硬件接口:是指两个硬件设备之间的连接方式,既包括物理上的接口,还包括逻辑上的数据传送协议。

软件接口:通常是指程序代码,在Java中表示一种特殊的类,是具有的N个方法的特征集合,表示一种规范;还有一种情况数据接口,表示客户端和服务端之间的数据交互的方式。

比如,显示器中封装了很多电子元器件,这些元器件连接在一起为显示器的正常共工作提供支持,那显示器如何与外界的其他设备(如电脑主机、外放音响、耳机等设备)通信交互呢?也是通过显示暴露的通信接口——显示器上暴露的“孔”。通过连接这些“孔”,其他设备就能和显示一起工作,能够获取显示器中的信息数据,也能够为显示器提供一些显示器不具备的功能,比如:优质的音响效果。

接口的设计目的:从上述的显示器例子中,不难发现,接口可以看作是设备和设备之间的通信桥梁,通过交换数据完成通信。接口表示一种规范/约束/实现者必须遵循的规范,目的就是用来约束使用者应该怎么做。那如果没有这些规范(接口),会出现什么样的问题?

在如今这个智能机泛滥的年代,不知道大家有没有怀念当年功能机和山寨机横行的年代,在那些年代,收件之间的充电设备各个品牌有各个品牌的“特色”,各个品牌均不一样;如果充电设备丢了,或者损坏了,往往要花费很大的代价才能才能买到新的,所以在当时的万能充电器才能流行一时,但其充电效果却并不如人意。

由此带来的问题极大的困扰了广大手机用户。

各有特色的功能机充电器

直到Android系统的出现,统一了充电接口规范后,这个问题才得到了有效解决。大多数Android手机的充电的接口是相同的( Micro-USB/Type-c/Lightning)。当然了,苹果手机是个特立独行的大佬。

生活中,USB接口和我们经常接说的USB插槽其实是有所偏差的,其并不是我们平时所看到的那些USB插槽,而是那些USB插槽所遵循的一种规范(标准)。USB的英文是Universal Serial Bus(通用串行总线),用于规范电脑与外部设备的连接和通讯,广泛应用于PC领域的接口技术。

我们所看到的那些USB插槽是根据USB接口规范设计出来的产品,对于不同型号的USB设备而言,他们各自的USB插槽都需要遵循同一个规范,如此可以保证任何插入USB插槽的设备都能与主板正常通信。对于同一种型号的主板上的多个USB插槽,他们有相同的数据交换方式,相同的实现细节;在面向对象的思想中,可认为他们都是同一个类的不同实例,也就是说插槽是USB规范的实例。

接口和实现类体现了真正的多态

接口只定义了应当遵循的规范,却并不关心这些规范的内部数据和其功能的实现细节,从而分离了规范和实现,增强了系统的可拓展性和可维护性。这样做的好处:比如,主板上提供了USB插槽,只要一个遵循了USB规范的鼠标,就可以插入USB插槽,并与主板正常通信,而不必关心至于这个鼠标的厂商,鼠标内部实现。当鼠标坏了的时候,只需要换个鼠标就行。

Java中的接口

Java中的接口,书面解释是多个抽象类的抽象就是接口;通俗点说,在Java中最小的程序单元是类,而接口其实是一个特殊的类。和USB接口一样,Java中的接口也表示规范,用于定义一组抽象方法,表示某一类事物必须具备的功能,接口的实现类来实现该接口并提供接口中每个方法的实现。

定义类语法: 权限修饰符 class 类名{}定义接口语法: 权限修饰符 interface 接口名{}

接口的命名:

表示具有某些能力的,可以以able/handler结尾。如: Walkable.java以I开头表示接口,如:IWalkable.java接口在编译成功之后,和类一样,也是.class的字节码文件。

接口中的成员:

1.接口中没有构造器,因为接口不能使用new关键字创建对象(不能 new );

2.接口中不能定义普通方法,接口中的方法都是默认为公共的抽象方法,而且都是 public abstract 修饰的;所以接口中的方法的public符 和 abstract 修饰符是可以省略不写的;

3.接口中定义的成员变量,实质是全局静态常量,默认使用 public static final来修饰;

public static final String NAME = "老夫不正经";

4.接口中定义的内部类都是公共的静态内部类,默认使用public static来修饰内部类.

public static interface Openable {}

标志接口:没有任何成员,仅仅提供一个接口定义的接口,其就只是一个标志,若有类实现该接口,则该类就属于接口这一派系。这个使用的不多,了解就好。

常量接口:使用接口来封装多个常量信息,称之为常量接口,其目的和普通常量类相同,但在这里不建议使用。

接口的特点:

接口没有构造器,更不能显式定义构造器,故接口不能被实例化。接口里的方法方法全是抽象公共的,默认修饰符是public abstract。接口里的字段全是全局静态常量,默认修饰符是public static final。接口里的内部类全是公共静态的,默认修饰符是public static。接口的继承:

接口只能继承接口,不能继承类,且接口支持多继承(类是单继承关系)。接口继承语法如下:

[修饰符] interface 接口名 extends 接口1,接口2

类和类之间的继承关系用extends关键字来表示,接口和接口之间也只能是继承关系,也使用extends 关键字来表示。

接口和实现类之间只能是实现关系,而且是类实现接口,用implements关键字来表示。

类和接口的实现关系

接口的实现

接口仅仅只是定义了某一类事物应该具有某些功能,但是没有提供任何实现。但在Java 8以及以后的版本中,接口是可以有默认实现的。此时,我们定义了一个类,再用该类去实现接口,那么就必须覆盖接口中的方法,提供功能实现,从而实现类接口中定义的功能。

类实现接口:一个类可以实现多个接口,从而也弥补了类的单继承问题。语法如下:

[修饰符] class 实现类名 extends 父类 implements 接口1,接口2{}

接口和实现类之间的关系,称之为"实现关系",使用implements关键字来表示,但有时候为了方便,也把这个实现关系称之为特殊继承关系。可以这样理解:接口是实现类的父类:实现类就是接口的子类。

面向接口编程

接口和实现类的多态关系是在开发中比较常见的多态体现

接口 变量 = 创建实现类对象;//体现了多态思想

接口中的方法是公共的抽象的,所以实现类必须覆盖接口中的方法,并且方法必须使用public修饰,因为接口中的方法默认就是使用public修饰的。

接口和抽象类的相同点:

都位于继承的顶端,用于被其他类或者接口实现或继承;都不能被实例化;都可以定义抽象方法,其子类/实现类都必须覆写这些抽象方法;接口和抽象类的不同点:

接口没有构造方法,抽象类有构造方法;抽象类可包含普通方法和抽象方法,接口只能包含抽象方法(Java8之前);类是单继承的,一个类只能继承一个直接父类(可能是抽象类),接口是支持多继承的;一个可以类实现多个接口(接口弥补了Java的单继承);成员变量:接口里默认是public static final,抽象类是默认包权限;方法:接口里默认是public abstract,抽象类默认是默认包访问权限;内部类:接口里默认是public static,抽象类默认是默认包访问权限;如果接口和抽象类可以完成相同的功能,尽量使用接口,这就是面向接口编程。面向接口编程在于使用多态的好处,把实现类对象赋给接口类型变量,屏蔽了不同实现类之间的实现差异,从而可以做到通用编程。

案例:使用USB设备来工作。

USB接口及USB实现设备

主板

运行实例

完结。

java 接口对象_Java面向对象之接口——interface相关推荐

  1. java面向对象接口实现_Java面向对象之接口

    接口(interface): 接口的地位等同于class,换句话说接口中的所有方法都是抽象方法.在声明接口中的方法时,可以使用abstract关键字,也可以不适用,通常情况下,都会省略掉abstrac ...

  2. java final对象_java面向对象基础_final详细介绍

    一.final关键字 1.final修饰的成员变量,其实就是常量 public class Example01 { public final String userName="小李" ...

  3. java抽象机制_Java很好学:接口+抽象类+事件监听机制

    接口?抽象类? 首先知道知道下接口.抽象类的概念 接口:只含有常量和抽象方法(只有方法名和参数不含方法体的方法) 抽象类:可以定义常量和抽象方法(和接口一样),还可以定义变量和普通方法和构造方法(和一 ...

  4. java中塑形_Java学习5——接口和多态

    1 接口 接口相当于一个完全抽象的,没有任何实现的类 所有的成员函数都是抽象函数 所有的成员变量都是public static final而且一定要赋予初值 接口中的静态函数必须有函数体 接口在声明时 ...

  5. java 接口重写_java如何实现接口中的重写

    普通类implements接口 1.普通方法,抽象方法都得重写: 2.默认方法可重写,也可不重写. 抽象类implements接口 在线视频教程分享:java教学视频 由抽象类来实现接口,则不必重写接 ...

  6. Java抽象类和接口使用_Java 抽象类和接口

    一.抽象类 1.定义 抽象类指提供方法,但是未提供方法体(实现方法)的类,抽象类用来被子类继承,子类通过方法的重写实现抽象方法. 注:1)抽象类中不一定包含抽象类,它可能只是abstract修饰的类: ...

  7. java语言基础(39)——面向对象(接口的引入及特点)

    接口存在的意义: 一个动物类,里面定义了动物的各种公共行为,比如吃,睡等,其它具体的动物,比如小猫,小狗都可以继承这个动物类来拥有吃,睡这些方法.那么现在,有些动物经过训练,获得了动物本来没有的额外技 ...

  8. java 面向组件_Java 面向对象

    面向对象: 1, 面向过程的思想 准备去一个地方: 先买车, 挂牌, 开导航, 踩油门, 过黄河, 穿越珠穆朗玛峰... 2, 面向对象的思想 我开着车去, 车怎么去随便 所有去这个地方的信息, 全部 ...

  9. java 复制对象_Java程序员必备:序列化全方位解析

    前言 相信大家日常开发中,经常看到Java对象"implements Serializable".那么,它到底有什么用呢?本文从以下几个角度来解析序列这一块知识点~ 什么是Java ...

最新文章

  1. 苹果挂端口方法_一招教你,让光猫四个端口既能上网又能IPTV,不用再区分端口...
  2. HMC管理IBM小机
  3. Drupal8系列(五):主题制作之搭建框架-Ubuntu 14.04 LTS
  4. 彩信编辑器之预览功能
  5. 6个步骤卸载wine
  6. arcgis插值不覆盖区划图_ArcGIS绘图—空气质量站点数据插值绘制等值线图
  7. hive mysql windows_Java-从MySQL到Hive导入,其中MySQL在Windows上运行,而Hive在Cent OS上运行(Horton Sandbox)...
  8. 【Codeforces - 864D】Make a Permutation!(贪心,字典序)
  9. Python 第三方模块之 imgaug (图像增强)
  10. mysql一:初识数据库
  11. 学硬件设计,需要看哪些书籍?
  12. 中国石油大学c语言程序设计答案,中国石油大学C语言程序设计第一册在线作业答案...
  13. 两个网段计算机如何共享打印机,不同网段的打印机共享怎么连接?具体步骤
  14. Codeforces - Serval and Parenthesis Sequence
  15. 无限火力跳跳机器人_2021LOL无限火力机器人最强出装和天赋介绍
  16. 老子是一个怎样的传奇!(转发)
  17. 电路分析三------KCL,KVL,VCR方程
  18. 2012年桂城街道小学毕业生升初中
  19. 发布有礼!2015 Autodesk程序商店有奖发布活动拉开序幕
  20. 双DSP6657+FPGA K7架构电路方案

热门文章

  1. webpack自定义loader--编译.tpl文件
  2. 汪希斌老师--物流采购供应链专家--沪师经纪刘建
  3. 【手牵手】搭建前端组件库(二)
  4. css实现文字超出不换行,超出部分显示省略号
  5. 【iMessage苹果推】真机脚本源码推送都使用UDID唯一标识
  6. EasyNVR视频通道录像计划的录像文件播放失败问题排查
  7. 传感器433报文协议
  8. 转:微信支付开发关键点技术解析
  9. JSON-handle插件使用-Chrome浏览器
  10. rm: cannot remove ‘.nfs00000000066962660000031b‘: Device or resource busy