- Java8之前,在编写一个接口时,接口中只定义方法,不能有方法体,方法的实现全部交由实现类去完成。
例如:
public interface Car {
void painting();
}
public class AudiCar implements Car {
@Override
public void painting() {
System.out.println("奥迪喷漆");
}
}
public class BMWCar implements Car {
@Override
public void painting() {
System.out.println("宝马喷漆");
}
}
- 如果在接口中新增一个方法,所有的实现类都需要实现这个方法。
如果不希望所有的实现类都实现新增的方法,可以使用Java8新特性中的
default和static方法修饰符。
例如:
public interface Car {
void painting();
default void driver() {
System.out.println("开车");
}
static void fix() {
System.out.println("修理车辆");
}
}
接口Car中新增的driver、fix方法不需要在接口中去实现,使用方法如下:
public class TestCar {
public static void main(String[] args) {
Car.fix();
AudiCar audiCar = new AudiCar();
audiCar.driver();
audiCar.painting();
}
}
- static方法不需要创建实例,可以直接使用接口调用,static不可以重写;
default方法需要创建实例进行调用,如果需要修改default的方法实现,可以在实现类中进行重写。