JDK8对接口进行了增强,新增了默认方法和静态方法。
默认方法:允许接口中添加default修饰的非抽象方法,且允许在接口实现类中进行重写覆盖,通过接口实现类的实例化对象进行方法调用。静态方法:允许接口中添加static修饰的非抽象方法,只能通过接口名来进行方法调用。定义接口:
public interface Speakable { // 默认方法 default void sayHi() { System.out.println("Hi form interface!"); } // 默认方法 default void sayHello() { System.out.println("Hello form interface!"); } // 静态方法 static void sayBye() { System.out.println("Bye!"); } }定义接口实现类:
public class Person implements Speakable{ // 覆盖接口默认方法 @Override public void sayHello() { System.out.println("Hello from class!"); } public static void main(String[] args) { Person person = new Person(); person.sayHello(); person.sayHi(); // 调用接口静态方法 Speakable.sayBye(); } }输出:
Hello from class! Hi form interface! Bye!从设计角度来说:接口是为了规范类的行为,是“like-a”的关系,抽象为了类的复用,是“is-a”的关系。 抽象类支持的功能比接口更多,但有单继承局限,优先考虑使用接口。