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