您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 10-Java接口技术讲解
Java编程精要—Java接口技术福建厦门2016年6月本章目标掌握Java接口理解Java接口与多态的关系掌握面向接口编程的思想掌握常量接口的使用本章相关词汇单词说明interface接口,界面implements实现final最终的,决定性的生活中的接口电脑主板上的PCI插槽的规范就类似于Java接口每种卡的内部结构都不相同,可以把声卡、网卡、显卡都插在PCI插槽上,而不用担心哪个插槽是专门插哪个卡的声卡显卡网卡主板Java中的接口一个Java接口是一些方法特征的集合,但没有方法的实现publicinterfacePCI{publicvoidstart();publicvoidstop();}这是Java接口,相当于主板上的PCI插槽的规范Java中的接口classSoundCardimplementsPCI{publicvoidstart(){System.out.println(Dudu...);}publicvoidstop(){System.out.println(Soundstop!);}}Java接口中定义的方法在不同的地方被实现,可以具有完全不同的行为声卡、网卡都实现了PCI插槽的规范,但行为完全不同Java中的接口classNetworkCardimplementsPCI{publicvoidstart(){System.out.println(Send...);}publicvoidstop(){System.out.println(Networkstop!);}}声卡、网卡都实现了PCI插槽的规范,但行为完全不同publicclassAssembler{publicstaticvoidmain(String[]args){PCInc=newNetworkCard();PCIsc=newSoundCard();nc.start();sc.start();}}Java接口可以用于定义数据运行时,根据实际创建的对象类型调用相应的方法实现Dudu...Send...控制台输出Java中的接口为各学校开发这样一个小系统,包含类型:教员、学校、打印机,具体要求如下:教员、以及学校都具有方法:返回详细信息学校具有方法:打印,能够通过学校的打印机打印教员或学校的详细信息系统要具备良好的可扩展性与可维护性打印教员学校教员详细信息学校详细信息detail方法(输出详细信息)Java中的接口假设一个系统中包含三个类:教师(Teacher)、学校(School)、打印机(Printer),具有如下要求:教员和学校都具有方法tell,用于返回信息打印机能够将学校或教员返回的信息输出Java中的接口打印教员学校教员信息学校信息tell方法publicclassTeacher{publicStringtell(){return本人是教员;}}publicclassSchool{publicStringtell(){return这里是学校;}}publicclassPrinter{publicvoidprint(Teachert){System.out.println(t.tell);}publicvoidprint(Schools){System.out.println(s.tell);}}每增加一种新类型,都需要增加相应的print(类型名称var)方法可以使用多态来解决这个问题吗?教员学校tell方法教员信息学校信息1221两个类具有同名方法,但具体实现不同,应根据具体的实例决定使用哪个tell方法满足使用多态的条件,但教员与学校两个类不存在共性,不适合由同一个基类派生教员、学校都存在一个共同的方法tell,它们对该方法有各自不同的实现—这完全符合Java接口的定义定义一个Java接口,在其中定义tell方法,但没有具体实现实现这个Java接口,不同的类对tell方法有不同的具体实现IntroduceableTeacher(教员)School(学校)publicclassTeacherimplementsIntroduceable{publicStringtell(){return本人是教员;}}publicclassSchoolimplementsIntroduceable{publicStringtell(){return这里是学校;}}publicinterfaceIntroduceable{publicStringtell();}publicclassPrinter{publicvoidprint(Introduceableintro){System.out.println(intro.tell);}}使用print方法时,参数可以是任何Introduceable接口的实现类的对象,不必再为不同的类型建立不同的print方法了通过Java接口,我们同样可以享受到多态性的好处,大大提高了程序的可扩展性及可维护性Java接口允许多重实现(即一个类同时实现多个接口)编程练习为刚才完成的系统增加一种新的类型:学员(Student),具体要求如下:学员具有tell方法,负责输出学员信息能够通过学校的打印机打印学员的信息编写测试类进行测试面向接口编程开发系统时,主体构架使用接口,接口构成系统的骨架这样就可以通过更换接口的实现类来更换系统的实现IntroduceableTeacher(教员)School(学校)面向接口编程•升级上述的系统,要求:–打印机有多种类型,比如:黑白打印机、彩色打印机等–学校可能配备其中任意一款打印机,负责打印学校的详细信息print方法(打印)彩色打印机黑白打印机黑白内容学校/教员详细信息彩色内容抽象出Java接口(1)分析:黑白、彩色打印机都存在一个共同的方法特征—print;黑白、彩色打印机对print方法有各自不同的实现(2)结论:抽象出Java接口PrinterInf,在其中定义方法print(3)具体实现:publicinterfacePrinterInf{publicvoidprint(Stringcontent);}面向接口编程实现Java接口(1)分析:已经抽象出Java接口PrinterInf,并在其中定义了print方法黑白、彩色打印机对print方法有各自不同的实现(2)结论:黑白、彩色打印机都实现PrinterInf接口,各自实现print方法(3)具体实现:面向接口编程publicclassColorPrinterimplementsPrinterInf{publicvoidprint(Stringcontent){System.out.println(彩色打印:);System.out.println(content);}}publicclassBlackPrinterimplementsPrinterInf{publicvoidprint(Stringcontent){System.out.println(黑白打印:);System.out.println(content);}}使用Java接口更换实现接口的类就可以更换系统的实现面向接口编程publicclassSchool{privatePrinterInfprinter;//打印机publicvoidsetPrinter(PrinterInfp){this.printer=p;}publicvoidprint(){printer.print(厦门理工学院);}}面向接口编程publicclassTest{publicstaticvoidmain(String[]args){//创建学校实例Schoolschool=newSchool();//为该学校配备黑白打印机school.setPrinter(newBlackPrinter());school.print(school);//为该学校配备彩色打印机school.setPrinter(newColorPrinter());school.print(school);}}代码阅读阅读如下Java代码,然后请采用面向接口编程的思想,在空白处填写正确的代码publicinterfacePCI{voidstart();voidstop();}classSoundCardimplementsPCI{publicvoidstart(){System.out.println(Dudu...);}publicvoidstop(){System.out.println(Soundstop!);}}classNetworkCardimplementsPCI{publicvoidstart(){System.out.println(Send...);}publicvoidstop(){System.out.println(Networkstop!);}}这是Java接口,相当于主板上的PCI插槽的规范声卡、网卡都实现了PCI插槽的规范,但行为完全不同publicclassMainBoard{publicvoidusePCICard(______p){p.start();p.stop();}}publicclassAssembler{publicstaticvoidmain(String[]args){MainBoardmb=newMainBoard();//在主板上插入网卡//在主板上插入声卡}}提示:通过这个方法,主板上可以插入任意符合PCI插槽规范的卡PCInc=newNetworkCard();mb.usePCICard(nc);PCIsc=newSoundCard();mb.usePCICard(sc);PCI提示:可以通过更换实现接口的类来更换系统的实现代码阅读常量概述生活中,一周有七天,如何用代码表示?publicclassWeek{privateintdays=7;publicstaticvoidmain(String[]args){Weekw=newWeek();System.out.println(一周有+w.days+天);}}publicclassWeek{privateintdays=7;publicstaticvoidmain(String[]args){Weekw=newWeek();w.days++;System.out.println(一周有+w.days+天);}}一周有7天控制台输出•然而,总有不尽人意的事情发生:一周有8天控制台输出如何保证变量的值在运行期无法被改变?——使用常量常量是一种标识符,它的值在运行期间恒定不变常量标识符在程序中只能被引用,而不能被重新赋值常量圆周率PI圆周率PI代码表示方式publicstaticfinaldoublePI=3.14159265358979323846;用法将ang角度转换成径度publicstaticdoubletoRadians(doubleang){returnang/180.0*PI;}常量概述如果不使用常量,直接在程序中填写数字或字符串,将会有什么麻烦?publicstaticdoubletoRadians(doubleang){returnang/180.0*3.14159265358979323846;}publicstaticdoubletoDegrees(doubleang){returnang*180.0/3.14159265358979323846;}publicstaticfinaldoublePI=3.14159265358979323846;//圆周率publicstaticdoubletoRadians(doubleang){returnang/180.0*PI;}publicstaticdoubletoDegrees(doubleang){returnang*180.0/PI;}程序的可读性变差:用户很难理解数字或字符串的意思程序的可维护性变差:如果数值改变,则需要在很多地方改动,既麻烦又易出错使用常量可以增
本文标题:10-Java接口技术讲解
链接地址:https://www.777doc.com/doc-1878134 .html