java中的接口(interface)是一种只包含了静态常量和抽象方法的特殊抽象类。
接口的使用可以实现即插即用的功能。
比如:电脑城的组装人员可以直接将PCI设备(网卡,声卡,显卡等设备)直接插到主板的PCI槽中,就可以使用PCI的功能
因为主板制造厂商跟PCI设备的制造厂商是按照同一的PCI规范来设计自己的产品的
下面定义了几个类和接口
//PCI接口,相当与现实中的PCI规范
interface PCI{
void start();
void stop();
}
//NetWorkCard类相当与生产网卡的设计图纸。它是按照PCI规范设计的并且提供2个功能
class NetWorkCard implements PCI{
public void start(){
System.out.println("Send...");
}
public void stop(){
System.out.println("Stop...");
}
}
//SoundCard类相当与生产声卡的设计图纸,它也是按照PCI规范设计的也提供2个功能
class SoundCard implements PCI{
public void start(){
System.out.println("du..du..");
}
public void stop(){
System.out.println("Sound stop");
}
}
//MainBoard类相当与生产主板的设计图纸,它负责调用PCI提供的方法
class MainBoard{
public void UsePCICard(PCI p){
p.start();
p.stop();
}
}
/*
组装人员类,组装人员只需要用按设计图纸制造出来的PCI设备直接插到按主板设计图纸制造出来的主板上
就可以实现主板调用PCI提供的功能
至于具体怎么实现,组装人员可以不做了解
*/
class Assembler{
public static void main(String[] args){
MainBoard mb = new MainBoard();
NetWorkCard nc = new NetWorkCard();
SoundCard sc = new SoundCard();
mb.UsePCICard(nc);
mb.UsePCICard(sc);
//匿名类之类用于测试功能
mb.UsePCIcard(new PCI{
public void start(){
System.out.println("Test start..");
}
public void stop(){
System.out.println("Test stop..");
}
}
);
}
}
上面关于匿名类中类的说明
new PCI();因为PCI是一个接口,即一个抽象类。所以不能实例化。
但是可以实例化一个PCI的子类testPCI,子类实现接口中的方法。
new testPCI(){
public void start(){
System.out.println("Test start...");
}
public void stop(){
System.out.println("Test stop...");
}
}
因为testPCI是PCI的一个子类,子类可以隐形的转换成父类
所以就有了:
new PCI(){
public void start(){
System.out.println("Test start..."):
}
public void stop(){
System.out.println("Test stop...");
}
}