- 接口的概念
- 定义接口
- 类实现接口
- 接口的特点
- 案例
官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
实际上接口是对 Java 不能多继承的一种弥补手段。和抽象类很相似,接口用于制定一系列规范,不过接口比抽象类更抽象,可以理解为一种极致抽象的类。
定义接口public interface Name {...}
类实现接口
Class ClassName implements InterfaceA, InterfaceB,... {...}
接口的特点
- 一个类只能继承一个父类,但可以实现多个接口(可以在继承一个父类的同时实现多个接口),类实现接口必须重写接口所有抽象类(抽象类不用);
- 接口可以继承接口,相当于对接口内容进行了扩展;
- 接口可以实现多态,使用高层引用常见低层实例(接口引用指向实现接口的类);
- 接口中不能定义构造方法,不能实例化;
- 接口与接口之间存在继承关系,一个接口可以继承多个接口;
Interface A extends InterfaceB, InterfaceC,... {...}
- 接口中的变量默认为也只能为 public static final,接口中的方法默认为 public abstract (JDK1.8以前接口中只能定义 public abstract 方法),都可省略;
- 从JDK1.8开始,除了 public abstract 方法外,接口中还可以定义 default 方法以及 static 方法;
- defaulf 方法只能出现在接口中,在接口中被 default 修饰的方法为普通方法,可以直接写方法体。类实现接口时不必须重写 default 方法,会直接继承该方法。
- 当类实现了多个接口包含相同的 default 方法时,此时不知道该继承哪个 default 方法,必须重写 default 方法 ;
- 当继承的父类中方法 A ,实现的接口中也有一个 default 方法 A 时,继承父类中的方法 A(类优先原则);
定义接口 Car :
public interface Car {
public abstract void start();
void brake(); // 接口中的方法默认 public abstract,可省略
void speedUp();
// 接口中可以定义default方法(default方法只能在接口中)
// 接口中的default方法可直接实现方法体,类实现接口时不必须重写,可直接调用;
// 省略了public
default void leftTurn() {
System.out.println("Make a left turn");
}
}
定义 Benz 类实现接口 Car:
public class Benz implements Car {
private double price;
public Benz() {
System.out.println("Benz");
}
public Benz(double price) {
this.price = price;
}
public void start() {
System.out.println("Benz starts");
}
public void brake() {
System.out.println("Benz brakes");
}
public void speedUp() {
System.out.println(" Benz speedups");
}
public double getPrice() {
return price;
}
}
测试类:
public class InterfaceDemo {
public static void main(String[] args) {
Benz benz = new Benz();
benz.start();
benz.leftTurn(); // 类继承了接口的 default 方法
System.out.println("----------------");
// 上转型
Car car = new Benz();
car.start();
car.leftTurn();
}
}
输出:
Benz Benz starts Make a left turn ---------------- Benz Benz starts Make a left turn



