接口的概述
电脑上面的主板有很多接口,比如内存条的接口,有了这个接口,可以插入多个内存条,主板和内存条可能不是同一家生产厂商,但是两种物体却能结合到一起,正是因为这个接口的存在。只要厂家遵循这个接口,主板和内存条就可以随意更换,提高了可插拔性,接口其实也是体现着一种规范。
在java语言里面使用interface来声明一个接口,接口其实是一个特殊的抽象类,在接口里面的方法全部都是抽象的。
关于接口,有几个需要注意的地方:
接口中只能出现常量和抽象方法(jdk8之后可以有default方法)
接口里面没有构造方法,无法创建接口的对象
接口和接口之间支持多继承,即一个接口可以有多个父接口
一个类可以实现多个接口,即一个类可以有多个父接口
一个类如果实现了接口,那么这个类需要重写接口中所有的抽象方法(建议),如果不重写则这个类需要声明为抽象类(不建议)
public interfaceA{
//常量(必须用public static final修饰) public static final double PI = 3.14;
//public static final是可以省略的. //double PI = 3.14; //抽象方法(接口中所有的抽象方法都是public abstract) publicabstractvoidm1();
//public abstract是可以省略的. voidm2();
}interfaceB{
voidm1();
}interfaceC{
voidm2();
}interfaceD{
voidm3();
}interfaceEextendsB,C,D{
voidm4();
}//implements是实现的意思,是一个关键字.//implements和extends意义相同。classMyClassimplementsB,C{
publicvoidm1(){}
publicvoidm2(){}
}
接口的作用
可以使项目分层,都面向接口开发,提高开发效率
降低了代码之间的耦合度,提高了代码的可插拔性
开发中尽量使用接口,少用抽象类,一个类可以实现多个接口,却只能继承一个父类
将之前的james开汽车的例子修改一下
将Car定义为接口
interface Car {
publicvoidrun();
}
创建Benz和BMW类去实现这个接口
classBenzimplementsCar{
publicvoidrun(){
System.out.println("奔驰汽车在跑");
}
}classBMWimplementsCar{
publicvoidrun(){
System.out.println("宝马汽车在跑");
}
}
Person类不变
class Person {
publicvoiddrive(Car c){
c.run();
}
}
测试类不变
public class Test01 {
publicstaticvoidmain(String[] args){
Person james = new Person();
Benz bc = new Benz();
//james.drive(bc); //BMW bm = new BMW(); james.drive(bc);
}
}