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);
}
}