定义
[修饰符] interface 接口名 extends 父接口1,父接口2...
{
零个到多个常量定义...
零个到多个抽象方法定义...
零个到多个内部类、接口、枚举定义...
零个到多个私有方法、默认方法或类方法定义...
}
1.定义接口不再使用class关键字,而是使用interface关键字。
2.接口名应与类名采用相同的命名规则。
3.一个接口可以有多个直接父类接口,但接口只能继承接口,不能继承类。
4.接口里不能包含构造器和初始化块定义。
5.接口里的成员变量只能是静态常量,接口里的方法只能是抽象方法,类方法,默认方法或私有方法。
6.接口里定义的成员变量只能在定义是指定默认值。
7.接口里的普通方法总是使用public abstract来修饰。接口里的普通方法不能有方法体,但类方法、默认方法、私有方法都必须有方法体。
接口和抽象类
特征:
1.接口和抽象类都不能被实例化,他们都位于继承树的顶端,用于被其他类实现和继承。
2.接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。
设计差别:
1.接口作为系统与外界交互的窗口,接口体现的是一种规范。
2.抽象类作为系统中多个子类的共同父亲,体现的是一种模板式设计。
用法差别:
1.接口里只能包含抽象方法,静态方法,默认方法和私有方法,不能为普通方法提供方法实现;抽象类则完全可以包含普通方法。
2.接口里只能定义静态常量,不能定义普通方法变量;抽象类里则既可以定义普通成员变量,也可以定义静态常量。
3.接口里不包含构造器;抽象类里可以包含构造器,抽象类里的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作。
4.接口里不能包含初始化块;抽象类则完全可以包含初始化块。
5.一个类最多只能有一个直接父类,包含抽象类;但一个类可以直接实现多个接口,通过实现多个接口可以弥补java单继承的不足。