1.1接口的定义

java中接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

接口是一种引用数据类型。使用interface声明,形式如下:

public interface 接口名称{
}

1.2 接口的特性

【1】接口中可以声明属性。接口定义的所有变量都是static final类型的。

【2】接口中的方法都是公共抽象方法。

【3】接口不能拥有构造方法,不能用于创建对象。

【4】接口可以多继承,一个接口可以继承多个接口。

public interface CInterface extends AInterface, BInterface {

}

【5】一个类可以实现一个或多个接口,该类称为接口的实现类(implement class)。实现类必须实现接口中所有的(抽象)方法。

  一个类只能继承一个父类,同时实现多个接口。继承在前,实现在后。

 public class ImplClass3 extends AbsClass implements AInterface,BInterface{

     @Override
public void showInfoA() {
// TODO Auto-generated method stub } @Override
public void showInfoB() {
// TODO Auto-generated method stub } @Override
public void showInfoC() {
// TODO Auto-generated method stub } }

特殊情况:

如果一个抽象父类定义了和接口同名的抽象方法,实现类实现的是抽象父类的抽象方法。

 package cn.interface02;

 public class ImplClass4 extends AbsClass implements CInterface{

     @Override
public void showInfoA() {
// TODO Auto-generated method stub } @Override
public void showInfoB() {
// TODO Auto-generated method stub } @Override
public void showInfoC() {
// TODO Auto-generated method stub } }

总结:

实现类实现接口,必须实现接口中定义的抽象方法。

=>方法即行为,表示一种能力。

=>接口定义了一套功能,实现类必须实现这些功能。=>实现类的能力得到拓展。

2 接口的应用

2.1接口的应用

【1】接口表示一种能力

  接口定义了一系列的方法表示一种种的能力。接口让实现类实现这些方法,实现类的能力得到拓展和升级。

 package cn.sxt.interface03;

 /**
* 驾驶接口
*/
public interface DriveInterface {
/**
* 驾驶的方法
*/
public void drive();
} package cn.sxt.interface03; public class Student implements DriveInterface{
////…
public void learn(String cName) {
System.out.println(this.name+"正在学习"+cName);
} @Override
public void drive() {
System.out.println(this.name+"正在驾驶...");
} } package cn.sxt.interface03; public class Teacher implements DriveInterface{
/// … @Override
public void drive() {
System.out.println(this.name+"正在学习驾驶技术...");
System.out.println(this.name+"很快学会了飙车...");
} }

【2】接口实现多态

  

 package cn.sxt.interface4;

 public class Test01 {
public static void main(String[] args) { // 同一引用类型
USBInterface usbInterface = null; // 实例不同
usbInterface = new USBFan();
// 对同一方法的执行结果不同
usbInterface.connect(); usbInterface = new USBMouse();
usbInterface.connect(); usbInterface = new USBDisk();
usbInterface.connect();
}
}

接口实现多态:接口类型 引用 实现类

继承实现多态:父类类型 引用 子类对象

接口定义的方法被实现类实现,通过接口引用实现类,调用接口中的方法时,执行的是实现类实现的方法。

实现类对象具备接口中定义的能力是一种 has a 关系

子类对象是一种父类类型 是一种 is a关系

【3】面向接口编程

  在面向接口编程中,接口表示一种约定(协议),约定(规范)了实现类应该具备(has a)的能力.

  理解:

  =>实现类必须实现接口中的所有的方法,所以接口通过接口里的方法规范了实现类的行为。

  =>接口约定了实现类的应该具备的行为。

  面向接口编程

  所谓面向接口编程,在程序设计时,只关心实现类具备什么能力,而不关心如何实现这个能力。

  面向接口编程时,面向接口的约定而不考虑接口的具体实现。

  也就是说,面向接口编程时,接口中的定义方只关系实现类是否具备了接口所定义的能力,而不关心这个能力是如何被实现的。

  

 package cn.sxt.interface06;

 public class Writer {

     // 预留墨盒接口
private InkBoxInterface inkBoxInterface; // 预留纸张接口
private PaperInterface paperInterface; public InkBoxInterface getInkBoxInterface() {
return inkBoxInterface;
} public void setInkBoxInterface(InkBoxInterface inkBoxInterface) {
this.inkBoxInterface = inkBoxInterface;
} public PaperInterface getPaperInterface() {
return paperInterface;
} public void setPaperInterface(PaperInterface paperInterface) {
this.paperInterface = paperInterface;
} public Writer(InkBoxInterface inkBoxInterface, PaperInterface paperInterface) {
super();
this.inkBoxInterface = inkBoxInterface;
this.paperInterface = paperInterface;
} public Writer() {
super();
} public void print(String content) {
System.out.println("打印机正在使用"+this.inkBoxInterface.getColor()+"颜色打印"+this.paperInterface.getSize()+"打印"+content);
}
}

3 抽象类和接口的异同比较

  1. 抽象类和接口都是引用数据类型。他们不能创建对象。
  2. 他们都可以定义抽象方法,都可以实现多态。但是抽象类可以定义非抽象方法,而接口中定义的方法都是抽象方法。
  3. 抽象类和接口都具有传递性。抽象类中的是单根性(单继承),而接口是多继承。
  4. 在概念上都可以重写抽象方法。子类重写抽象类,实现类实现接口。
  5. 抽象类和子类解决的是模块内的问题(代码重用,重写,多态)而接口解决的是模块间的问题。=>高内聚,低耦合。接口可以用解耦模块。

  

Java-接口(interface)的更多相关文章

  1. Java接口interface

    Java接口interface 1.多个无关的类可以实现同一个接口. 2.一个类可以实现多个无关的接口. 3.与继承关系类似,接口与实现类之间存在多态性. 接口(interface)是抽象方法和常量值 ...

  2. Java——接口interface

    3.5接口interface ①有时必须从几个类中派生出一个子类,继承它们所有的属性和方法.但是,Java不支持多重继承.有了接口,就可以得到多重继承的效果. ②接口(interface)是抽象方法和 ...

  3. 浅谈Java接口(Interface)

    浅谈Java接口 先不谈接口,不妨设想一个问题? 如果你写了个Animal类,有许多类继承了他,包括Hippo(河马), Dog, Wolf, Cat, Tiger这几个类.你把这几个类拿给别人用,但 ...

  4. Java 接口 interface implements

    接口定义了一系列的抽象方法和常量,形成一个属性集合. 接口定义完成后任何类都可以实现接口,而且一个类可以实现多个接口. 实现接口的类必须实现接口中定义的抽象方法,具体实现细节由类自己定义.可以说接口定 ...

  5. 详解java接口interface

    引言 接口这个词在生活中我们并不陌生. 在中国大陆,我们可以将自己的家用电器的插头插到符合它插口的插座上: 我们在戴尔,惠普,联想,苹果等品牌电脑之间传输数据时,可以使用U盘进行传输. 插座的普适性是 ...

  6. Java接口interface,匿名内部类

    接口 1.接口内部为 常量+公用的抽象方法.类必须实现接口中的所有方法 2.接口的语法格式:不写abstract会自动添加,可以继承多个接口 修饰符不能使private,protected [修饰符] ...

  7. java接口(interface)

    引入:抽象类是从多个类中抽象出来的模板,若要将这种抽象进行得更彻底,就得用到一种特殊的“抽象类”→ 接口; 例子: 生活中听说过的USB接口其实并不是我们所看到的那些插槽,而是那些插槽所遵循的一种规范 ...

  8. Java 接口和抽象类差别

    原文:http://blog.csdn.net/sunboard/article/details/3831823 1.概述 一个软件设计的好坏,我想非常大程度上取决于它的总体架构,而这个总体架构事实上 ...

  9. Java 接口和抽象类区别(写的很好,转了)

    原文:http://blog.csdn.net/sunboard/article/details/3831823 1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是 ...

  10. Java 接口和抽象类--缺省模式

    一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法和一些具体 ...

随机推荐

  1. [iOS11] contentInsetAdjustmentBehavior 问题, push back时, 界面会上下移动.

    https://stackoverflow.com/questions/45573829/weird-uitableview-behaviour-in-ios11-cells-scroll-up-wi ...

  2. spring boot slf4j日记记录配置详解

    https://blog.csdn.net/liuweixiao520/article/details/78900779

  3. Kafka(二)CentOS7.5搭建Kafka2.11-1.1.0集群与简单测试

    一.下载 下载地址: http://kafka.apache.org/downloads.html    我这里下载的是Scala 2.11对应的 kafka_2.11-1.1.0.tgz 二.kaf ...

  4. Cow Relays POJ - 3613 (floyd+快速幂)

    For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a relay race usin ...

  5. PostgreSQL自学笔记:9 索引

    9 索引 9.1 索引简介 索引是对数据库表中一列或多列值进行排序的一种结构,使用 索引可提高数据库中特定数据的查询速度 9.1.1 索引的含义和特点 索引是一种单独的.存储在磁盘上的数据库结构,他们 ...

  6. SDOI2018:原题识别

    题解: https://files.cnblogs.com/files/clrs97/old-solution.pdf Code: #include<cstdio> #include< ...

  7. Caused by: java.util.concurrent.RejectedExecutionException: Thread pool is EXHAUSTED! Thread Name:

    异常引发的问题: 线程模型 如果事件处理的逻辑能迅速完成,并且不会发起新的 IO 请求,⽐如只是在内存中记个标识,则直接在 IO 线程上处理更快,因为减少了线程池调度. 但如果事件处理逻辑较慢,或者需 ...

  8. bootstrap_响应式布局简介_媒体查询_媒体选择器_2x3x图

    响应式布局 在不同设备上,同一网页根据设备特性(显示屏大小,分辨率)呈现不同的布局样式. 思考: 获取设备相关信息 将屏幕划分为几个区域 给需要变化的结构写多套 css 样式 媒体查询 常用写法 @m ...

  9. Node.js_ express.Router 路由器_模块化管理路由

    路由器 express.Router 路由器 模块化管理 路由 基本使用: 路由模块 1. 引入 express const express = require('express'); 其他相关模块 ...

  10. winform 利用Http向服务器上传与下载文件

    利用在服务器端的IIS,布置“请求处理映射”.从而处理,本地发出Post请求.Url指向web网站所在路径的请求映射.由映射代码实现服务器保存文件. winform里面使用,WebClient的对象, ...