- 一、掌握接口基础知识
接口是特殊的抽象类。抽象类中往往有具体的方法和抽象的方法,只有抽象方法的抽象类可以用接口来表示
接口比抽象类更灵活,越灵活的东西耦合度越低,Spring就是面向接口编程,面向切面
定义接口:
public interface IMyInterface {//接口名称最好以大写的I开头,表示定义的是一个接口
public void foo(); //所有方法都是: public abstract
//其他方法
}
接口特性:
- 接口不可以被实例化
- 实现类必须实现接口的所有方法 (抽象类除外)
- 实现类可以实现多个接口 (Java中可以间接实现多继承)
- 接口中的变量都是静态常量,即使用public static final修饰
- 接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量(成员变量)和方法的实现(没有方法体)。 即:接口是方法定义和常量定义的集合。
- 接口和类类似,也可以从一个父接口中派生。接口的继承也是使用"extends"关键字来完成。
- 和类不同的是,一个接口可以继承多个父接口,各个父接口之间使用英文的逗号分隔(即:“,”)
- 多个无关的类可实现同一个接口。
- 一个类可实现多个无关的接口(implements)
- 在Java中,可以通过接口来间接实现多继承,实现某个接口也类似于继承的特性(可以理解为实现接口就是变相的继承)
- 接口不能实现接口
public interface AudioDevice{
public static final int MIN_VOLUME = 5;
public void turnOn();
public void turnOff();
public void tuneVolume(int volume);
}
public interface VideoDevice{
public static finalint MIN_BRIGHTNESS = 10;
public void turnOn();
public void turnOff();
}
public interface VADevice extends VideoDevice,AudioDevice{
public void shiftChannel();
}
- 二、掌握接口作为一种约定(规范)和能力的含义
- 接口是一种约定,体现在接口名称和注释上
- 面向接口编程:程序设计时面向接口的约定(规范)而不考虑具体实现
接口里面的方法必须全部用public修饰,public abstract可以省略,但建议写上public,省略abstract;定义常量是public static final,可以省略,但建议写上,可读性更好些
另一种角度理解:
- 接口是一种能力,体现在接口的方法上
- 面向接口编程:(程序设计时)关心实现类有何能力,而不关心实现细节;面向接口的约定而不考虑接口的具体实现
抽象类可以实现接口,因为在抽象类中可以实现某个接口中的全部或部分方法,例如:实现部分方法时,由于还有剩余的方法没有被实现,所以该类还是一个抽象类,当实现了某个接口的全部方法后,如果该类中还有至少一个方法是抽象方法,该类还是一个抽象类。
- 在日常开发中,尽量使用接口代替继承,因为接口在一定程度上与继承类拟,而且在实例化对象时,不像类的继承那样需要向上追溯初始化父类。
- 但是,也不要一味刻意追求使用接口,接口的抽取是需要长时间对项目的分析而总结出来的。否则如果随意使用接口,将会导致项目中接口较多,从而使维护更加困难。