Java-接口(interface)
1.1接口的定义
java中接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
接口是一种引用数据类型。使用interface声明,形式如下:
public interface 接口名称{ }
1.2 接口的特性
【1】接口中可以声明属性。接口定义的所有变量都是static final类型的。
【2】接口中的方法都是公共抽象方法。
【3】接口不能拥有构造方法,不能用于创建对象。
【4】接口可以多继承,一个接口可以继承多个接口。
public interface CInterface extends AInterface, BInterface { }
【5】一个类可以实现一个或多个接口,该类称为接口的实现类(implement class)。实现类必须实现接口中所有的(抽象)方法。
一个类只能继承一个父类,同时实现多个接口。继承在前,实现在后。
1 public class ImplClass3 extends AbsClass implements AInterface,BInterface{ 2 3 @Override 4 public void showInfoA() { 5 // TODO Auto-generated method stub 6 7 } 8 9 @Override 10 public void showInfoB() { 11 // TODO Auto-generated method stub 12 13 } 14 15 @Override 16 public void showInfoC() { 17 // TODO Auto-generated method stub 18 19 } 20 21 }
特殊情况:
如果一个抽象父类定义了和接口同名的抽象方法,实现类实现的是抽象父类的抽象方法。
1 package cn.interface02; 2 3 public class ImplClass4 extends AbsClass implements CInterface{ 4 5 @Override 6 public void showInfoA() { 7 // TODO Auto-generated method stub 8 9 } 10 11 @Override 12 public void showInfoB() { 13 // TODO Auto-generated method stub 14 15 } 16 17 @Override 18 public void showInfoC() { 19 // TODO Auto-generated method stub 20 21 } 22 23 }
总结:
实现类实现接口,必须实现接口中定义的抽象方法。
=>方法即行为,表示一种能力。
=>接口定义了一套功能,实现类必须实现这些功能。=>实现类的能力得到拓展。
2 接口的应用
2.1接口的应用
【1】接口表示一种能力
接口定义了一系列的方法表示一种种的能力。接口让实现类实现这些方法,实现类的能力得到拓展和升级。
1 package cn.sxt.interface03; 2 3 /** 4 * 驾驶接口 5 */ 6 public interface DriveInterface { 7 /** 8 * 驾驶的方法 9 */ 10 public void drive(); 11 } 12 13 package cn.sxt.interface03; 14 15 public class Student implements DriveInterface{ 16 ////… 17 public void learn(String cName) { 18 System.out.println(this.name+"正在学习"+cName); 19 } 20 21 @Override 22 public void drive() { 23 System.out.println(this.name+"正在驾驶..."); 24 } 25 26 } 27 28 package cn.sxt.interface03; 29 30 public class Teacher implements DriveInterface{ 31 /// … 32 33 @Override 34 public void drive() { 35 System.out.println(this.name+"正在学习驾驶技术..."); 36 System.out.println(this.name+"很快学会了飙车..."); 37 } 38 39 }
【2】接口实现多态
1 package cn.sxt.interface4; 2 3 public class Test01 { 4 public static void main(String[] args) { 5 6 // 同一引用类型 7 USBInterface usbInterface = null; 8 9 // 实例不同 10 usbInterface = new USBFan(); 11 // 对同一方法的执行结果不同 12 usbInterface.connect(); 13 14 usbInterface = new USBMouse(); 15 usbInterface.connect(); 16 17 usbInterface = new USBDisk(); 18 usbInterface.connect(); 19 } 20 }
接口实现多态:接口类型 引用 实现类
继承实现多态:父类类型 引用 子类对象
接口定义的方法被实现类实现,通过接口引用实现类,调用接口中的方法时,执行的是实现类实现的方法。
实现类对象具备接口中定义的能力是一种 has a 关系
子类对象是一种父类类型 是一种 is a关系
【3】面向接口编程
在面向接口编程中,接口表示一种约定(协议),约定(规范)了实现类应该具备(has a)的能力.
理解:
=>实现类必须实现接口中的所有的方法,所以接口通过接口里的方法规范了实现类的行为。
=>接口约定了实现类的应该具备的行为。
面向接口编程
所谓面向接口编程,在程序设计时,只关心实现类具备什么能力,而不关心如何实现这个能力。
面向接口编程时,面向接口的约定而不考虑接口的具体实现。
也就是说,面向接口编程时,接口中的定义方只关系实现类是否具备了接口所定义的能力,而不关心这个能力是如何被实现的。
1 package cn.sxt.interface06; 2 3 public class Writer { 4 5 // 预留墨盒接口 6 private InkBoxInterface inkBoxInterface; 7 8 // 预留纸张接口 9 private PaperInterface paperInterface; 10 11 public InkBoxInterface getInkBoxInterface() { 12 return inkBoxInterface; 13 } 14 15 public void setInkBoxInterface(InkBoxInterface inkBoxInterface) { 16 this.inkBoxInterface = inkBoxInterface; 17 } 18 19 public PaperInterface getPaperInterface() { 20 return paperInterface; 21 } 22 23 public void setPaperInterface(PaperInterface paperInterface) { 24 this.paperInterface = paperInterface; 25 } 26 27 public Writer(InkBoxInterface inkBoxInterface, PaperInterface paperInterface) { 28 super(); 29 this.inkBoxInterface = inkBoxInterface; 30 this.paperInterface = paperInterface; 31 } 32 33 public Writer() { 34 super(); 35 } 36 37 public void print(String content) { 38 System.out.println("打印机正在使用"+this.inkBoxInterface.getColor()+"颜色打印"+this.paperInterface.getSize()+"打印"+content); 39 } 40 }
3 抽象类和接口的异同比较
- 抽象类和接口都是引用数据类型。他们不能创建对象。
- 他们都可以定义抽象方法,都可以实现多态。但是抽象类可以定义非抽象方法,而接口中定义的方法都是抽象方法。
- 抽象类和接口都具有传递性。抽象类中的是单根性(单继承),而接口是多继承。
- 在概念上都可以重写抽象方法。子类重写抽象类,实现类实现接口。
- 抽象类和子类解决的是模块内的问题(代码重用,重写,多态)而接口解决的是模块间的问题。=>高内聚,低耦合。接口可以用解耦模块。