河南经贸职业学院—信息管理系主讲教师:武俊琢第八讲接口及应用----4.13接口信息管理系武俊琢河南经贸职业学院—信息管理系主讲:武俊琢***温故***抽象方法abstract方法,并且没有方法体。抽象类abstract类,一般含有抽象方法。抽象类的一般用法只能做为父类被继承,不能直接实例化。只有通过子类实现抽象方法后,才能实例化。一般对于不同的子类可以有不同的实现过程。河南经贸职业学院—信息管理系主讲:武俊琢本讲要点接口的基本概念接口定义接口实现接口应用举例理解接口Jar文件(略)河南经贸职业学院—信息管理系主讲:武俊琢接口的概念在《ThinkinginJava》一书中,作者对接口有这样的描述:“接口(interface)比抽象(abstract)的概念更进了一步。你可以把一个接口看成是一个纯的抽象类。”为什么使用接口?1、Java中不允许类的多继承,但在解决实际问题过程中,仅仅依靠单一继承在很多情况下都不能将问题的复杂性表述完整。通过接口可以实现多继承。如:Father类有playFootball(),Mother类有sing(),如果采用类的继承来产生一个Son类,则它只能从一个类中继承。要么继承Father,要么继承Mother。2、接口在面向对象的设计与编程中应用非常广泛,特别是实现软件模块间的连接方面有着巨大的优势。河南经贸职业学院—信息管理系主讲:武俊琢接口的声明及注意事项如果一个抽象类中所有的方法都是抽象的,就可以将这个类用另外一种方式来定义,也就是接口定义。[public]interface接口名[extends父接口名列表]{数据类型常量名=常数;返回值方法名([参数列表]);}几点说明:1、interface是接口的关键字,定义接口和定义类相似。并被编译为class文件。2、接口的访问控制符只有public,如果使用public修饰符,则可以被所有类和接口使用,且接口名与文件名相同。如果不使用public,则接口只能被同一个包中的类和接口使用。3、接口中所有的方法都是publicabstract即公共的抽象方法。4、接口中可以有数据成员,这些数据成员默认都是publicstaticfinal即公共类常量。河南经贸职业学院—信息管理系主讲:武俊琢接口声明实例//Father.java文件名publicinterfaceFather//父亲会踢球{publicabstractvoidplayFootball();}//Mother.java文件名publicinterfaceMother//母亲爱唱歌{publicabstractvoidsing();}//Flyable.java能飞的动物publicinterfaceFlyable{voidfly();}//Talkable.java能说话的动物publicinterfaceTalkable{voidtalk();}河南经贸职业学院—信息管理系主讲:武俊琢接口的实现与多继承接口的实现通过类来完成,在定义类时使用“implements接口名列表”短语,并在类体中实现接口中的抽象方法。接口和实现类之间的关系实质上是继承的关系1、一个类可以实现多个接口,从而实现多继承。publicclassSmartChildimplementsFather,Mother{publicvoidplayFootball(){System.out.println(我会踢足球!);}publicvoidsing(){System.out.println(我会唱歌!);}publicstaticvoidmain(String[]args){SmartChildchild=newSmartChild();child.playFootball();child.sing();}}河南经贸职业学院—信息管理系主讲:武俊琢类实现接口时的注意事项注意:在类声明部分,用implements关键字指明该类将要实现哪些接口。实现接口的类必须在类体中给出所有方法的实现,否则该类应该声明为抽象类。接口中的方法都是public的,所以实现方法时也必须加上public,否则编译报错。总结:一个接口可以继承另一个接口Java中不允许类的多继承,但允许接口的多继承在java中一个类可以实现多个接口一个类在继承另一个类的同时,可以实现多个接口。河南经贸职业学院—信息管理系主讲:武俊琢例4.26(P75)将小程序改为应用程序interfaceComputable{finalintMAX=100;voidspeak(Strings);intf(intx);floatg(floatx,floaty);}河南经贸职业学院—信息管理系主讲:武俊琢classChinaimplementsComputable{intxuehao;publicintf(intx){intsum=0;for(inti=1;i=x;i++){sum+=i;}returnsum;}publicfloatg(floatx,floaty){return6;}publicvoidspeak(Strings){}}河南经贸职业学院—信息管理系主讲:武俊琢classJapanimplementsComputable{intxuehao;publicintf(intx){return68;}publicfloatg(floatx,floaty){returnx+y;}publicvoidspeak(Strings){}}河南经贸职业学院—信息管理系主讲:武俊琢publicclassExample4_26{publicstaticvoidmain(String[]args){Chinach;Japanja;ch=newChina();ja=newJapan();ch.xuehao=991898;ja.xuehao=941448;System.out.println(xuehao:+ch.MAX+ch.xuehao+1+2+...+100=+ch.f(100));System.out.println(xuehao:+ch.MAX+ja.xuehao+两数之和:+ja.g(12,23));}}河南经贸职业学院—信息管理系主讲:武俊琢接口应用实例—程序模块间的连接//PCI接口,可看成一种标准interfacePCI{voidsetName(Strings);voidrun();}//符合PCI接口标准的网卡,即实现了PCIclassNetworkCardimplementsPCI{Stringname;publicNetworkCard(){name=D-Link;}publicvoidsetName(Strings)//实现接口中的抽象方法{name=s;}publicvoidrun()//实现接口中的抽象方法{System.out.println(name+网卡已开始工作!);}}例:组装电脑,通过PCI接口将主板模块与网卡模块和声卡模块连接。(接口回调)河南经贸职业学院—信息管理系主讲:武俊琢//符合PCI标准的声卡,即实现了PCI接口classSoundCardimplementsPCI{Stringname=SoundMax;publicvoidsetName(Strings)//实现接口中的方法{name=s;}publicvoidrun()//实现接口中的方法{System.out.println(name+声卡已开始工作!);}}//集成PCI接口的主板classMainboard{//usePCICard方法用来向主板插入一块PCI卡publicvoidusePCICard(PCIp)//参数p就是一个PCI卡{p.run();}publicvoidrun(){System.out.println(主板已开始工作!);}}接口实例(续1)河南经贸职业学院—信息管理系主讲:武俊琢//组装一台电脑classComputer{publicstaticvoidmain(String[]args){Mainboardmb=newMainboard();//选一块主板NetworkCardnc=newNetworkCard();//买一块网卡nc.setName(“NEC”);//这是一块NEC牌的网卡SoundCardsc=newSoundCard();//买了一块声卡mb.usePCICard(nc);//将网卡插到主板上mb.usePCICard(sc);//将声卡插到主板上mb.run();//主板运行}}接口实例(续2)红字部分注解:无论是网卡还是声卡,都是PCI接口的子类,所以,他们的对象能直接传递给usePCICard方法中的PCI接口的引用变量p,在参数传递过程中发生接口回调。河南经贸职业学院—信息管理系主讲:武俊琢理解接口(P76)接口只关心功能,不关心功能的具体实现收费接口与不同交通工具类具体收费情况项目主管、部门开发、speakLove方法教务管理系统中,教务处模块、各系部,如果教务处想调用各系的教学计划并打印,此时使用接口是必要的。教学计划(年号)河南经贸职业学院—信息管理系主讲:武俊琢小结1、接口的概念:如果一个方法中的所有方法都是抽象的,则可以以接口的形式进行定义。2、接口定义:使用interface关键字进行定义,数据成员隐含修饰符:publicstaticfinal,方法隐含修饰符:publicabstract3、接口实现:通过类来实现,使用implements短语。4、接口应用。河南经贸职业学院—信息管理系主讲:武俊琢作业一、认真阅读P76-P78二、编程1、编写Animal接口,接口中声明run()方法2、编写Plant接口,接口中声明eatable()方法3、定义Bird类和Fish类实现Animal接口4、定义Grass类和Tomato类实现Plant接口三、上机训练1、调试第二题。2、编程序验证:一个类在继承另一个类的同时实现一个接口。3、在调试程序过程中总结接口定义、接口实现时应注意的问题。