更彻底的抽象:接口
接口里不能包含普通方法,接口里的所有方法都是抽象方法。
接口是从多个相似类中抽象出来的规范,接口不提供任何实现。接口体现的是规范和实现分离的设计哲学。
接口定义:
[修饰符] interface 接口名 extends 父接口1,父接口2...
{
零个到多个常量定义...
零个到多个抽象方法定义...
}
- 修饰符可以是public或者省略,如果省略了public访问控制符,则默认采用包权限访问控制符,即只有在相同包结构下才可以访问该接口。
- 接口名应与类名采用相同的命名规则,即如果仅从语法角度来看,接口名只要合法的标识符即可;
- 一个接口可以有多个直接父接口,但接口只能继承接口,不能继承类
由于接口定义的是一种规范,因此接口里不能包含构造器和初始化块定义。接口里可以包含Field(只能是常量),方法(只能是抽象实例方法)、内部类(包含内部接口、枚举)定义。
接口里的Field只能是常量,接口里的方法只能是抽象方法。
只能是public的访问修饰权限。
系统自动为接口里定义的Field增加public static final修饰符。
int MAX_SIZE = 50; 等价如下定义
public static final int MAX_SIZE = 50;
对于接口里定义的方法而言,他们只能抽象方法,因此系统会自动为其增加abstract修饰符;由于接口里的方法全部是抽象方法,因此接口里不允许定义静态方法,即不可以使用static修饰接口里定义的方法。
不管定义接口里方法时是否使用了public abstract 修饰符,接口里的方法总是使用public abstract来修饰。
接口里定义的内部类,接口,枚举类默认都采用public static 两个修饰符,不管定义时是否指定这两个修饰符,系统都会自动使用public static对他们进行修饰。