接口
1.接口
接口是一种使用interface进行声明的引用数据类型。
public interface 接口名{ }
接口中可以声明属性了方法,但是在接口中所定义的属性都为静态常量(static final),方法都为公共抽象方法(public abstract void 方法名()),由于在接口中默认使用公共抽象方法,也可以写成public void 方法名() 。
public interface MyInterface {
public static final String version = "1.0";
public int count = 10; // 默认是static final类型
public void showInfo();
}
需要注意的是,在接口中不能创建对象,因此也不存在构造方法。接口可以进行多继承,一个接口可以继承多个其他接口。
ublic interface CInterface extends AInterface, BInterface {
}//继承后CInterface接口就具备了A、B接口中定义的抽象方法。
一个类只能继承一个父类,且同时可实现多个接口(该类为接口的实现类(implements class)),但必须实现接口中的所有抽象方法。先继承后实现。
public class ImplClass3 extends AbsClass implements AInterface,BInterface{ public void showInfoA() { // 实现内容 } public void showInfoB() { // 实现内容 } public void showInfoC() { // 实现内容 } }
若一个抽象父类定义了和接口同名的抽象方法,实现类实现的是抽象父类的抽象方法。
2.接口实现多态
接口实现多态: 接口类型 引用 实现类对象
继承实现多态: 父类类型 引用 子类对象
接口定义的方法被实现类实现,通过接口引用实现类时,调用接口中的方法时,执行的是实现类实现的方法。
public class Test01 { public static void main(String[] args) { // 同一引用类型 USBInterface usbInterface = null; // 实例不同 usbInterface = new USBFan(); // 对同一方法的执行结果不同 usbInterface.connect(); usbInterface = new USBMouse(); usbInterface.connect(); usbInterface = new USBDisk(); usbInterface.connect(); } }
3.面向接口编程
所谓面向接口编程,在程序设计时,只关心实现类具备什么能力,而不关心实现类如何实现这个能 力。面向接口编程时,面向接口的约定而不考虑接口的具体实现。
也就是说,面向接口编程时,接口的定义方只关系实现类是否具备接口所定义的能力,而实现类如何被的该能力接口定义方一点都不关心。
public class Writer { // 预留墨盒接口 private InkBoxInterface inkBoxInterface; // 预留纸张接口 private PaperInterface paperInterface; public InkBoxInterface getInkBoxInterface() { return inkBoxInterface; } public void setInkBoxInterface(InkBoxInterface inkBoxInterface) { this.inkBoxInterface = inkBoxInterface; } public PaperInterface getPaperInterface() { return paperInterface; } public void setPaperInterface(PaperInterface paperInterface) { this.paperInterface = paperInterface; } public Writer(InkBoxInterface inkBoxInterface, PaperInterface paperInterface) { super(); this.inkBoxInterface = inkBoxInterface; this.paperInterface = paperInterface; } public Writer() { super(); } public void print(String content) { System.out.println("打印机正在使用"+this.inkBoxInterface.getColor()+"颜色打印"+this.paperInterface.getSize()+"打印"+content); } }