一、接口概念
Java中的接口不是类,而是对类的一组需求描述,这些类要遵循接口描述的统一格式进行定义,这些类我们一般称之为实现类。在Java 8之前可以将接口看成完全的抽象类,也就是说不能有任何具体的实现方法。在Java 8中接口可以有默认的方法了。这是为了解决没有默认方法的接口维护的代价太高的原因。在Java 8之前,如果想在接口中增加一个方法,那么所有的接口实现类都得修改。
二、接口特性
- 接口中的方法自动的属于public,因此,在声明接口中的方法时,不必提供关键字public(作为严谨的程序员最好显式加上)
- 接口中声明的方法必须要在实现了类中通过重写的方法实现
- 接口不能被new实例化,但是可以声明接口类型的变量,然后声明的接口变量可以引用实现了接口的类对象。
Animal cat = new cat(); - 接口中不能有变量,但是却可以包含常量。
- 接口可以不定义任何方法,只包含几个常量。标准库中SwingConstants就是这样一个接口。
三、接口与抽象类
Java为什么要不辞辛苦的引入接口呢,为什么不直接使用跟接口很像的抽象类呢,这是因为Java不支持多继承。下面的场景
抽象类终究还是一个类。
class A extends B,C //error
class A extends B implements C //ok
class A implements B,C //ok
四、默认方法
在Java 8 中,可以为接口方法提供一个默认实现,必须用default修饰符标记这样一个方法。
-
默认方法可以调用其他方法。
默认方法用于“接口演化”
当有新的需求出现时,可以将新的方法作为默认方法实现。这样即使不重新编译实现类,也可以调用接口的这个默认方法。