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. [GO]tcp网络通信和实现

    服务端的代码 package main import ( "net" "fmt" ) func main() { //监听 listener, err := n ...

  2. 高并发Redis(Mac)环境配置(一)

    一.产生原因: SNS交互型网站的兴起,对于高并发,大负载数据的操作,海量数据的存储和访问 NoSql四种类型: 键值存储(Redis优点可以快速查询,缺点缺少存储的结构化)              ...

  3. OpenNIDataGet 获取点云数据

    运行后,采集的数据保存到:E:\OpenCVData目录下的color和depth文件夹下.接下来要求参数:内参 外参 这些参数最好优化后使用精度高 如何得到+保存格式 yaml 保存文件格式: 1. ...

  4. SVN错误:Attempted to lock an already-locked dir及不能提交.so文件

    当使用svn提交代码时,如果中断提交,就会进入工作拷贝的锁定状态. 这是需要用svn cleanup上次关闭时的锁定 如果没有Tortises,则直接进入到上面的文件夹下的.svn目录,删除lock文 ...

  5. Alpha冲刺(七)

    Information: 队名:彳艮彳亍团队组长博客:戳我进入作业博客:班级博客本次作业的链接 Details: 组员1(组长)柯奇豪 过去两天完成了哪些任务 改用更易用的springboot+myb ...

  6. 一、Numpy基础--数组

    (一)Numpy数组对象 Numpy中的nadrray是一个多维数组对象,该对象由两部分组成: 实际的数据 描述这些数据的元数据 大部分的数组操作仅仅修改元数据部分,而不改变底层的实际数据. 数组的数 ...

  7. memcached整理の内存管理及删除机制

    内存的碎片化 如果用C语言直接malloc,free来向操作系统申请和释放内存时,在不断申请和释放的过程中,形成了一些很小的内存片段,无法再利用.这种空闲但无法利用内存的现象称为内存的碎片化. sla ...

  8. [LeetCode 题解]: Validate Binary Search Tree

    Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as ...

  9. python下使用tesserocr遇到的一些坑

    我是在win7 64位系统下用的. 首先是安装tesseract,这个可以去官网下载,我使用的是3.05.1,安装时使用默认安装路径就行了,下载语言包速度很慢很慢,需要等 接下来就是安装tessero ...

  10. 数据库客户端工具Oracle SQL Developer

    Oracle SQL Developer是Oracle官方提供的数据库连接工具.不仅可以连接自己的数据库(Oracle),而且还可以连接多种其他的数据库(比如:Access.MySQL.SQL Ser ...