- 接口的概念
- 定义接口
- 类实现接口
- 接口的特点
- 案例
官方解释: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