1.1接口的概念
接口是一种数据类型,使用interface声明。
接口中声明的方法都是抽象方法,需要类对其进行实现。而这个类,我们称为这个接口的实现类。实现类必须实现它所实现的接口中的全部方法。接口也可以继承,与类继承所不同的是。一个接口可以同时继承好几个接口。
public class ImplClassA implements AInterface,BInterface{
@Override
public void showInfoA() {
System.out.println("实现接口中的showInfoA");
}
@Override
public void showInfoB() {
System.out.println("实现接口中的showInfoB");
}
}
一个类可以在继承类的同时继承接口。
public class ImplClass3 extends AbsClass implements AInterface,BInterface{
@Override
public void showInfoA() {
// TODO Auto-generated method stub
}
@Override
public void showInfoB() {
// TODO Auto-generated method stub
}
@Override
public void showInfoC() {
// TODO Auto-generated method stub
}
}
1.2接口是一种功能
我们的一个接口就定义了一个个方法,方法即功能。实现类实现了这些方法即拥有了这个功能。所以,接口可以使我们的实现类的功能更加强大。
package cn.sxt.interface03;
/*** 驾驶接口*/
public interface DriveInterface {
/*** 驾驶的方法*/
public void drive();
}
package cn.sxt.interface03;
public class Student implements DriveInterface{
…public void learn(String cName) {
System.out.println(this.name+"正在学习"+cName);
}
@Override
public void drive() {
System.out.println(this.name+"正在驾驶...");
}
}
package cn.sxt.interface03;
public class Teacher implements DriveInterface{
/// …
@Override
public void drive() {
System.out.println(this.name+"正在学习驾驶技术...");
System.out.println(this.name+"很快学会了飙车...");
}
}
1.3接口中的多态
接口中定义的方法,在每一个不同的实现类中实现的功能有所不同。因而形成了多态。
形如--->接口实现多态: 接口类型 引用 实现类对象
package cn.sxt.interface4;
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();
}
}
1.4面向接口编程和接口跟抽象类之间的比较
package cn.sxt.interface06;
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);
}
}
接口表示一种约定(协议),约定(规范)了实现类应该具备(has a)的能力。
理解:
=>实现类必须实现接口中所有的方法,所以接口规范了实现类的行为
=> 接口约定了实现类应该具备的行为。
面向接口编程
所谓面向接口编程,在程序设计时,只关心实现类具备什么能力,而不关心实现类如何实现这个能力。面向接口编程时,面向接口的约定而不考虑接口的具体实现。
也就是说,面向接口编程时,接口的定义方只关心实现类是否具备接口所定义的能力,而实现类如何被的该能力接口定义方一点都不关心。
• 抽象类和接口都是引用数据类型,他们都不能创建对象。
• 他们都可以定义抽象方法,都可以实现多态。但是抽象类可以定义非抽象方法,而接口中定义的都是抽象方法。
• 抽象类和接口都具有传递性。抽象类是单根性(单继承),而接口是多继承。
• 在概念上,都可以重写抽象方法。子类重写抽象类,实现类实现接口
抽象类和子类解决的是模块内的问题(代码重用,重写,多态)而接口解决的是模块间的问题 => 高内聚,低耦合。接口可以用解耦模块。