概述:

  • 一方面,有时必须从几个类中派生出一个子类,继承它们所有的属性和方法。但是,Java不支持多重继承。有了接口,就可以得到多重继承的效果。
  • 接口就是规范,定义的是一组规则,体现了现实世界中“如果你是/要…则 必须能…”的思想。继承是一个”是不是”的关系,而接口实现则是 “能不能” 的关系。

使用说明:

  • 接口(interface)是抽象方法和常量值定义的集合。
  • Java中,接口和类是并列的两个结构
  • 如何定义接口:定义接口中的成员
    • JDK7及以前:只能定义全局常量和抽象方法

全局常量:public static final的;但是书写时,可以省略不写
抽象方法:public abstract的

  • JDK8:除了定义全局常量和抽象方法之外,还可以定义静态方法、默认方法。

  • 接口中不能定义构造器的!意味着接口不可以实例化。

  • Java开发中,接口通过让类去实现(implements)的方式来使用.

如果实现类覆盖了接口中的所有抽象方法,则此实现类就可以实例化
如果实现类没有覆盖接口中所有的抽象方法,则此实现类仍为一个抽象类

  • Java类可以实现多个接口 —->弥补了Java单继承性的局限性

格式:class AA extends BB implements CC,DD,EE

  • 接口与接口之间可以继承,而且可以多继承

interface CC extends AA,BB

  • 接口的主要用途就是被实现类实现。(面向接口编程)
  • 与继承关系类似,接口与实现类之间存在多态性
  • 接口和类是并列关系,或者可以理解为一种特殊的类。从本质上讲, 接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义 (JDK7.0及之前),而没有变量和方法的实现。
  • 创建接口的匿名实现类的匿名对象———>同抽象类

接口和抽象类之间的对比

image.png

面试题:
interface A {
int x = 0;
}

class B {
int x = 1;
}

class C extends B implements A {
public void pX() {
// System.out.println(x);——->编译不通过。因为x是不明确的
System.out.println(super.x);//1
System.out.println(A.x);//0

}

public static void main(String[] args) {
new C().pX();
}
}