1   什么是接口

接口是一种引用数据类型。使用interface声明接口,形式:  public interface 接口名称{}

1.1.1 接口的特性

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

public interface MyInterface {
public static final String version = "1.0";
public int count = 10; // 默认是static final类型
}

[2] 接口中的方法都是公共抽象方法。

public interface MyInterface {
public abstract void showInfo();
void showInfo3(); // 推荐写法
public void showInfo2();
}

[3] (C)接口不能拥有构造方法,不能用于创建对象

【4] 接口可以多继承。一个接口可以继承多个其他接口(B)

public interface CInterface extends AInterface, BInterface {

}

CInterface接口就具备了A、B接口中定义的抽象方法。

[5] (A) 一个类可以实现一个或者多个接口,该类称为接口的实现类(implement class).

实现类必须实现接口中的所有(抽象)方法

public class ImplClassA implements AInterface,BInterface{

    @Override
public void showInfoA() {
System.out.println("实现接口中的showInfoA");
} @Override
public void showInfoB() {
System.out.println("实现接口中的showInfoB");
}
}

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

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 } }

总结:

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

–>方法即行为,表示一种功能

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

1.2接口的应用

1.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+"很快学会了飙车...");
} }

实现类Student具备了驾驶能力,实现类Teacher也具备了驾驶能力,原因是都实现了DriveInterface,两个实现类的能力得到了增强。

1.2.2     [2]接口实现多态(B)

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 关系

1.2.3[3] 面向接口编程(A)

接口表示一种约定(协议),约定(规范)了实现类应该具备(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);
}
}

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

• 抽象类和接口都是引用数据类型,他们都不能创建对象。

• 他们都可以定义抽象方法,都可以实现多态。但是抽象类可以定义非抽象方法,而接口中定义的都是抽象方法。

• 抽象类和接口都具有传递性。抽象类是单根性(单继承),而接口是多继承。

• 在概念上,都可以重写抽象方法。子类重写抽象类,实现类实现接口

• 抽象类和子类解决的是模块内的问题(代码重用,重写,多态)而接口解决的是模块间的问题 => 高内聚,低耦合。接口可以用解耦模块。

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

}

}

java 接口的学习的更多相关文章

  1. java接口的学习笔记

    1接口 接口是一个特殊的类,在JAVA中,接口是由抽象方法和全局敞亮组成. 在JAVA忠使用INTERFACE定义接口. public class InterfaceDemo { public sta ...

  2. 学习java接口知识

    学习java接口知识 //一个类最多只能有一个直接的父类.但是有多个间接的父类. java是单继承. class ye_01{ String name; } class fu_01 extends y ...

  3. Java学习之Java接口回调理解

    Java接口回调 在Java学习中有个比较重要的知识点,就是今天我们要讲的接口回调.接口回调的理解如果解释起来会比较抽象,我一般喜欢用一个或几个经典的例子来帮助加深理解. 举例:老板分派给员工做事,员 ...

  4. hadoop2.5.2学习及实践笔记(六)—— Hadoop文件系统及其java接口

    文件系统概述 org.apache.hadoop.fs.FileSystem是hadoop的抽象文件系统,为不同的数据访问提供了统一的接口,并提供了大量具体文件系统的实现,满足hadoop上各种数据访 ...

  5. java接口调用——webservice就是一个RPC而已

    很多新手一听到接口就蒙逼,不知道接口是什么!其实接口就是RPC,通过远程访问别的程序提供的方法,然后获得该方法执行的接口,而不需要在本地执行该方法.就是本地方法调用的升级版而已,我明天会上一篇如何通过 ...

  6. 一位资深程序员大牛给予Java初学者的学习路线建议

    java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈 ...

  7. 回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议

    引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容 ...

  8. Java程序员学习之路

    1. Java语言基础 谈到Java语 言基础学习的书籍,大家肯定会推荐Bruce Eckel的<Thinking in Java>.它是一本写的相当深刻的技术书籍,Java语言基础部分基 ...

  9. Java虚拟机JVM学习04 类的初始化

    Java虚拟机JVM学习04 类的初始化 类的初始化 在初始化阶段,Java虚拟机执行类的初始化语句,为类的静态变量赋予初始值. 在程序中,静态变量的初始化有两种途径: 1.在静态变量的声明处进行初始 ...

随机推荐

  1. k8s启动Pod遇到CrashLoopBackOff的解决方法

    1.用kubectl get pod 当看到上面的状态后执行第2步 2.查看pod详情 [root@cc hzb]# kubectl describe pod ceph-mysql-hzb-pod 找 ...

  2. spring事务以及springweb

    什么是事务.事务特性.事务隔离级别.spring事务传播特性 https://www.cnblogs.com/zhangqian1031/p/6542037.html Spring AOP 中@Poi ...

  3. UML的常用关系及其符号表示

    原创 UML的常用关系及其符号表示 一.实现关系 通常是一个类实现一个接口 符号表示: 二.泛化关系 通常是一个类继承另外一个类 符号表示: 三.依赖关系 通常是一个类里面的方法的参数类型是另一个类 ...

  4. javascript高级程序设计读书笔记----面向对象的程序设计

        创建对象   工厂模式 function createPerson(name, age, job){ var o = new Object(); o.name = name; o.age = ...

  5. jQuery基础入门

    一.什么是 jQuery Jquery它是javascript的一个轻量级框架,对javascript进行封装,它提供了很多方便的选择器.供你快速定位到需要操作的元素上面去.还提供了很多便捷的方法. ...

  6. [LeetCode 题解]: String to Interger (atoi)

    Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. ...

  7. [数学趣味001]RSA算法原理及示例

    可以先看看这个视频: RSA_Encryption_Algorithm 公开密钥 Perwork: 私钥:Sender和Receiver预先约定加密和解密方案,向其他人保密. 这个实现比较难:向其他人 ...

  8. django使用ajax传输数据

    HTML文件ajax get例子 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  9. border使用小技巧

    border-style 分类 dashed虚线类型 dotted 点线类型 double 双线类型 双线型量根实线的宽度和中间空白区域的间距有一定规律: 可以利用这个规律画出一些特殊的图案 代码如下 ...

  10. leetcode 39 组合总和 JAVA

    题目: 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的数字可以无限制 ...