接口比抽象类更抽象。不用class关键字而是用interface,定义的是多个类共同的公共行为规范。抽象类里不光有抽象方法还有普通方法,而接口里所有方法都是抽象方法,不能包含普通方法。
[修饰符] interface 接口名 extends 父接口1,父接口2……
{
零到多个常量定义……零到多个抽象方法定义……
}
1、修饰符可以是public或者省略,如果省略了public访问控制符,则默认采用包权限访问控制符,即只有在相同包结构下才可以访问该接口。
2、接口名应与类名采用相同的命名规则。
3、一个接口可以有多个直接父接口,但接口只能继承接口,不能继承类。java类只能有一个直接父类。
一个类可以实现一个或多个接口,继承使用用extends,实现用implements。
[修饰符] class 类名 extends 父类 implements 父接口1,父接口2……
{
类体部分
}
一个类实现接口后,必须完全实现接口所定义的全部抽象方法,否则,这个类就要保留从父接口哪里继承到的抽象方法,这个类也就该被定义为抽象类。因为接口中定义的方法都是抽象方法,所以只要没有全部实现,那么类将继承到抽象方法,从而这个类也就应该被定义为抽象类。
接口类似于整个系统的”总纲“,它指定了系统各个模块应该遵循的标准;抽象类作为系统中多个子类的共同父类,所体现的是一种模板式设计,抽象类作为多个子类的抽象父类,可以被当成系统实现过程中的中间产品,这个中间产品已经实现了系统的部分功能(那些已经提供实现的方法),但这个产品不能当成最终产品,必须有更进一步的完善。
接口和抽象类的差别:
1、接口里只能包含抽象方法,不能有已经提供实现的方法;抽象类则完全可以包含普通方法。
2、接口里不能定义静态方法,都是public abstract修饰的;抽象类可以定义静态方法。
3、接口只能定义静态常量成员变量,用public static final修饰,不能定义普通成员变量;抽象类可以定义普通成员变量也可以定义静态常量成员变量。
4、接口不包含构造器;抽象类可以包含构造器,但并与用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作。
5、接口不能包含初始化块;抽象类可以包含初始化块。
6、一个类最多一个直接父类,包括抽象类;但一个类可以直接实现多个接口,通过实现多个接口可以弥补java单继承的不足。