java只支持单重继承,不支持多重继承,即一个类只能有一个父类,但是在实际应用中,又经常需要使用多重继承来解决问题,为了解决该问题,java提供了接口来实现多重继承功能。
【接口的简介】:
接口是一个抽象类, 接口中所有的方法都没有方法体。抽象类里面可以定义抽象方法,只有连接上接口,就可以实现想要的功能。
【接口的定义】:
interface是定义接口的关键字,接口的定义和类的定义很相似(也分为接口的声明和接口体),其中接口体又常量定义和方法定义两部分。
格式如下:
[修饰符] interface 接口名 [extends 父类接口名列表]{
[public] [static] [final] 常量;
[public] [abstract] 方法;
}
接口中的方法只有定义,而没有被实现。
【java接口文件名必须和接口名相同】
【接口的继承】:
接口是可以被继承的,但是接口的继承和类的继承不太一样,接口可以实现多重继承,也就是说接口可以有多个直接父接口。和类相似的是,当子类继承父类接口时,子类可以获得父类所以的抽象方法,常量属性。
当一个接口继承多个父类接口时,多个父类接口排列在extends关键字之后,各个父类接口之间使用英文逗号隔开,
public interface interfaceA {
int one=1;
void sayA();
}
public interface interfaceB{
int two=2;
void sayB();
}
public interface interfaceC extends interfaceA,interfaceB{
int three=3;
void say();
}
public class app{
public static void main(String[] args) {
System.out.println(interfaceC.one);
System.out.println(interfaceC.two);
System.out.println(interfaceC.three);
}
}
【接口的实现】:
接口可以被类实现,也可以被其他接口继承,在类中实现接口,可以使用关键字implements。
语法格式:
[修饰符] class <类名> [extends 父类名] [implements 接口列表]{
}
每个类只能实现单重继承,而实现接口时,一次则可以实现多个接口,每个接口间使用逗号隔开,这是就可能出现常量或者方法名冲突的情况,解决该问题,如果常量冲突,则需要明确指定常量的接口,这就可以通过“接口名.常量”实现,如果出现方法冲突,则只要实现一个方法就可以了。
【接口和抽象类】:
共同点如下:
1、接口与抽象类都不能被实例化,能被其他类实现和继承。
2、接口和抽象类中都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。
差别:
接口指定了系统各模块间遵循的标准,体现的是一种规范,因此,接口一旦被定义之后不应该经常被改变,一旦改变会对整个系统造成影响,对于接口的实现者而言,接口规定了实现者必须向外提供哪些服务。当多个应用程序之间使用接口时,接口是多个程序之间的通信标准。
而抽象类作为多个子类的父类,它体现的是一种模板式设计,这个抽象父类可以被当成是中间产品。
具体差别如下:
1、接口中只能包含抽象方法,不包含普通方法,抽象类中可以包含普通方法。
2、接口中不能定义静态方法,抽象类中可以定义静态方法。
3、接口中只能定义静态常量属性,不能定义普通属性,抽象类里可以定义静态常量属性,也可以定义普通属性。
4、接口不能包含构造器,抽象类可以包含构造器,抽象类里面的构造器是为了让其子类调用并完成初始化操作。
5、接口中不能包含初始化块,但是抽象类可以
6、一个类最多只能有一个直接父类,包括抽象类,但是一个类可以实现多个接口