《12-接口1电子课件 Java应用程序设计——从模型到代码.ppt》由会员分享,可在线阅读,更多相关《12-接口1电子课件 Java应用程序设计——从模型到代码.ppt(47页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Java面向对象程序设计第十二次课内容回顾封装privatethis 构造方法Getter()、setter()继承ExtendsProtectedsuper多态方法重写方法重载abstract第十二次课内容抽象类final修饰符接口回顾举例说明在什么样的情况下,需要使用到继承?在Java程序中,多态性带给我们的好处是什么?4预习检查什么是常量?Java中,常量的定义规则有哪些?什么是面向接口编程,它的好处是什么?5抽象类用 abstract 修饰的类是抽象类。抽象类抽象类示例:Areafinal成员变量final成员变量示例final类如果一个类是final类,则该类中的方法也是final方
2、法。final方法不能被重写的方法本章任务升级HelloACCP,打印ACCP中心与教员的详细信息:正确使用面向接口编程的思想提高系统的可扩展性及可维护性13本章目标掌握Java接口理解Java接口与多态的关系掌握面向接口编程的思想掌握常量接口的使用14生活中的接口电脑主板上的PCI插槽的规范就类似于Java接口 15声卡声卡显卡显卡网卡网卡每种卡的内部结构都不相同,可以把声卡、每种卡的内部结构都不相同,可以把声卡、网卡、显卡都插在网卡、显卡都插在PCI插槽上,而不用担心哪插槽上,而不用担心哪个插槽是专门插哪个卡的个插槽是专门插哪个卡的主板主板一个Java接口是一些方法特征的集合,但没有方法的
3、实现16publicinterfacePCIpublicvoidstart();publicvoidstop();classSoundCardimplementsPCIpublicvoidstart()System.out.println(Dudu.);publicvoidstop()System.out.println(Soundstop!);Java接口中定义的方法在不同的地方被实现,可以具有接口中定义的方法在不同的地方被实现,可以具有完全不同的行为完全不同的行为这是这是Java接口,相当于主接口,相当于主板上的板上的PCI插槽的规范插槽的规范classNetworkCardimpleme
4、ntsPCIpublicvoidstart()System.out.println(Send.);publicvoidstop()System.out.println(Networkstop!);声卡、网卡都实现了声卡、网卡都实现了PCI插槽的规范,但行为完全不同插槽的规范,但行为完全不同什么是Java接口 2-217publicclassAssemblerpublicstaticvoidmain(Stringargs)PCInc=newNetworkCard();PCIsc=newSoundCard();nc.start();sc.start();可以使用可以使用Java接口标识类型接口标识
5、类型运行时,根据实际创建的对象类型调用相应的方法实现运行时,根据实际创建的对象类型调用相应的方法实现Dudu.Send.控制台输出控制台输出21为什么需要Java接口 5-1为ACCP各中心开发这样一个小系统,包含类型:教员、中心、打印机,具体要求如下:教员、以及中心都具有方法:输出详细信息中心具有属性:打印机,能够通过中心的打印机打印教员或中心的详细信息系统要具备良好的可扩展性与可维护性18打印打印教员教员中心中心教员教员详细信息详细信息中心中心详细信息详细信息detail方法方法(输出详细信息)(输出详细信息)为什么需要Java接口 5-2以下这个解决方案中存在着什么问题?19public
6、classAccpTeacher1/输出教员的详细信息输出教员的详细信息publicStringdetail()return本人是本人是ACCP教员教员;publicclassAccpSchool1privatePrinterprinter=newPrinter();/输出中心的详细信息输出中心的详细信息publicStringdetail()return这里是这里是ACCP中心中心;/使用打印机打印教员信息使用打印机打印教员信息publicvoidprint(AccpTeacher1t)printer.print(t.detail();/使用打印机打印中心信息使用打印机打印中心信息publi
7、cvoidprint(AccpSchool1s)printer.print(s.detail();publicclassPrinterpublicvoidprint(Stringcontent)System.out.println(开始打印:开始打印:);System.out.println(content);每增加一种新类型,都需要增加相应的每增加一种新类型,都需要增加相应的print(类型名称类型名称var)方法方法程序的可扩展性及可维护性极差程序的可扩展性及可维护性极差这不符合系统的要求这不符合系统的要求示例ACCPprinter如果增加Java_Teacher类或NetTeacher类
8、,程序仍然可扩展,体现了多态。如果增加学员类,打印学员的信息,程序可扩展性差。20为什么需要Java接口 5-3可以通过多态性解决这个问题吗?21显然,本系统符合使用多态性的条件显然,本系统符合使用多态性的条件教员教员中心中心detail方法方法(负责输出详细信息)(负责输出详细信息)教员教员详细信息详细信息中心中心详细信息详细信息1221回顾多态的含义:回顾多态的含义:实现同一个接口,使用不同的实例而执行不同操作实现同一个接口,使用不同的实例而执行不同操作为什么需要Java接口 5-422在这个系统中,存在继承关系吗?在这个系统中,存在继承关系吗?教员、中心属于两种不同的类型,无法通过教员、
9、中心属于两种不同的类型,无法通过“is-a”找到一个合找到一个合适的父类适的父类教员、中心都存在一个共同的方法特征:教员、中心都存在一个共同的方法特征:detail,它们对,它们对detail方法有各自不同的实现方法有各自不同的实现这完全符合这完全符合Java接口的接口的定义定义定义一个定义一个Java接口,在其中定义接口,在其中定义detail方法,但没有具体实现方法,但没有具体实现实现这个实现这个Java接口,不同的类对接口,不同的类对detail方法有不同的具体实现方法有不同的具体实现IntroduceableAccpTeacher2(教员教员)AccpSchool2(中心中心)为什么需
10、要Java接口 5-5使用了Java接口之后,这个系统有了怎样的改进?23publicinterfaceIntroduceablepublicStringdetail();publicclassAccpSchool2implementsIntroduceableprivatePrinterprinter=newPrinter();/输出中心的详细信息输出中心的详细信息publicStringdetail()return这里是这里是ACCP中心中心;/使用中心打印机打印信息使用中心打印机打印信息publicvoidprint(Introduceableintro)printer.print(in
11、tro.detail();publicclassAccpTeacher2implementsIntroduceable/输出教员的详细信息输出教员的详细信息publicStringdetail()return本人是本人是ACCP教员教员;通过通过Java接口,我们同样可以享受到多态性的好处,大大提高了程序的接口,我们同样可以享受到多态性的好处,大大提高了程序的可扩展性及可维护性可扩展性及可维护性使用使用print方法时,参数可以是任何方法时,参数可以是任何Introduceable接口的实现类的对象,接口的实现类的对象,不必再为不同的类型建立不同的不必再为不同的类型建立不同的print方法了方
12、法了小结 1为刚才完成的系统增加一种新的类型:学员(AccpStudent),具体要求如下:学员具有detail方法,负责输出学员详细信息能够通过中心的打印机打印学员的详细信息系统要具备良好的可扩展性与可维护性编写测试类StudentTest进行测试,要求:通过中心的打印机打印学员的详细信息24StudentTest完整代码实现完整代码实现AccpStudent完整代码实现完整代码实现示例修改后25什么是面向接口编程开发系统时,主体构架使用接口,接口构成系统的骨架这样就可以通过更换接口的实现类来更换系统的实现26publicclassAccpSchool2implementsIntroduce
13、ableprivatePrinterprinter=newPrinter();publicStringdetail()return这里是这里是ACCP中心中心;/使用中心打印机打印信息使用中心打印机打印信息publicvoidprint(Introduceableintro)printer.print(intro.detail();IntroduceableAccpTeacher2(教员教员)AccpSchool2(中心中心)面向接口编程的示例 4-127升级上述的升级上述的ACCP系统,要求:系统,要求:打印机有多种类型,比如:黑白打印机、彩色打印机等打印机有多种类型,比如:黑白打印机、彩色
14、打印机等中心可能配备其中任意一款打印机,负责打印教员、或者中心中心可能配备其中任意一款打印机,负责打印教员、或者中心的详细信息的详细信息系统要具备良好的可扩展性与可维护性系统要具备良好的可扩展性与可维护性print方法方法(打印)(打印)彩色打印机彩色打印机黑白打印机黑白打印机黑白内容黑白内容中心中心/教员教员详细信息详细信息彩色内容彩色内容面向接口编程的示例 4-2采用面向接口编程的方式实现,以下是三个步骤中的第一步:28抽象出抽象出Java接口接口1、分析:、分析:黑白、彩色打印机都存在一个共同的方法特征:黑白、彩色打印机都存在一个共同的方法特征:print黑白、彩色打印机对黑白、彩色打印
15、机对print方法有各自不同的实现方法有各自不同的实现2、结论:、结论:抽象出抽象出Java接口接口PrinterFace,在其中定义方法,在其中定义方法print3、具体实现:、具体实现:publicinterfacePrinterFacepublicvoidprint(Stringcontent);面向接口编程的示例 4-3采用面向接口编程的方式实现,以下是三个步骤中的第二步:29publicclassColorPrinterimplementsPrinterFacepublicvoidprint(Stringcontent)System.out.println(彩色打印:彩色打印:);S
16、ystem.out.println(content);publicclassBlackPrinterimplementsPrinterFacepublicvoidprint(Stringcontent)System.out.println(黑白打印:黑白打印:);System.out.println(content);实现实现Java接口接口1、分析:分析:已经抽象出已经抽象出Java接口接口PrinterFace,并在其中定义了,并在其中定义了print方法方法黑白、彩色打印机对黑白、彩色打印机对print方法有各自不同的实现方法有各自不同的实现2、结论:、结论:黑白、彩色打印机都实现黑白、
17、彩色打印机都实现PrinterFace接口,各自实现接口,各自实现print方法方法3、具体实现:、具体实现:面向接口编程的示例 4-4采用面向接口编程的方式实现,以下是三个步骤中的第三步:30使用使用Java接口接口1、分析:分析:主体构架使用接口主体构架使用接口,让接口构成系统的骨架让接口构成系统的骨架2、结论:、结论:更换实现接口的类就可以更换系统的实现更换实现接口的类就可以更换系统的实现3、具体实现:、具体实现:publicclassAccpSchool3implementsIntroduceableprivatePrinterFaceprinter;/打印机打印机publicvoid
18、setPrinter(PrinterFacep)this.printer=p;publicStringdetail()return这里是这里是ACCP中心中心;publicvoidprint(Introduceableintro)printer.print(intro.detail();publicclassAccpTestpublicstaticvoidmain(Stringargs)/创建中心实例创建中心实例AccpSchool3school=newAccpSchool3();/为该中心配备黑白打印机为该中心配备黑白打印机school.setPrinter(newBlackPrinter(
19、);school.print(school);/为该中心配备彩色打印机为该中心配备彩色打印机school.setPrinter(newColorPrinter();school.print(school);使用继承方式实现/再修改,升级为黑白、彩色打印机,开始打印其他类不变31使用接口方式实现32阅读如下Java代码,然后请采用面向接口编程的思想,在空白处填写正确的代码33publicinterfacePCIvoidstart();voidstop();classSoundCardimplementsPCIpublicvoidstart()System.out.println(Dudu.);p
20、ublicvoidstop()System.out.println(Soundstop!);classNetworkCardimplementsPCIpublicvoidstart()System.out.println(Send.);publicvoidstop()System.out.println(Networkstop!);这是这是Java接口,相当于主接口,相当于主板上的板上的PCI插槽的规范插槽的规范声卡、网卡都实现了声卡、网卡都实现了PCI插槽的规范,但行为完全不同插槽的规范,但行为完全不同小结 234publicclassMainBoardpublicvoidusePCICar
21、d(_p)p.start();p.stop();publicclassAssemblerpublicstaticvoidmain(Stringargs)MainBoardmb=newMainBoard();/在主板上插入网卡在主板上插入网卡/在主板上插入声卡在主板上插入声卡提示:通过这个方法,主板上提示:通过这个方法,主板上可以插入任意符合可以插入任意符合PCI插槽规插槽规范的卡范的卡PCInc=newNetworkCard();mb.usePCICard(nc);PCIsc=newSoundCard();mb.usePCICard(sc);PCI提示:可以通过更换实现接口的类提示:可以通过更
22、换实现接口的类来更换系统的实现来更换系统的实现小结打印机.打印(不同的内容)-讲解案例ACCPSchool信息ACCPTeacher信息ACCPStudent信息这些信息都遵循一样的格式规范,因此格式规范是一个接口,接口中定义了具体的格式,即方法detail()。主板.插卡(不同的卡)-现场编程案例网卡声卡显卡这些卡都要遵循PCI规范,因此PCI规范是一个接口,接口中定义了具体规范,即方法。35为什么需要常量生活中,一周有七天,如何用代码表示?36publicclassWeekprivateintdays=7;publicstaticvoidmain(Stringargs)Weekw=newW
23、eek();System.out.println(一周有一周有+w.days+天天);publicclassWeekprivateintdays=7;publicstaticvoidmain(Stringargs)Weekw=newWeek();w.days+;System.out.println(一周有一周有+w.days+天天);一周有一周有7天天控制台输出控制台输出然而,总有不尽人意的事情发生:然而,总有不尽人意的事情发生:一周有一周有8天天控制台输出控制台输出如何保证变量的值在运行期无法被改变?如何保证变量的值在运行期无法被改变?使用常量使用常量什么是常量常量是一种标识符,它的值在运行
24、期间恒定不变常量标识符在程序中只能被引用,而不能被重新赋值37常量常量圆周率圆周率PI圆周率圆周率PI代码表示代码表示方式方式publicstaticfinaldoublePI=3.14159265358979323846;用法用法将将ang角度转换成径度角度转换成径度publicstaticdoubletoRadians(doubleang)returnang/180.0*PI;常量的优点如果不使用常量,直接在程序中填写数字或字符串,将会有什么麻烦?38publicstaticdoubletoRadians(doubleang)returnang/180.0*3.14159265358979
25、323846;publicstaticdoubletoDegrees(doubleang)returnang*180.0/3.14159265358979323846;publicstaticfinaldoublePI=3.14159265358979323846;/圆周率圆周率publicstaticdoubletoRadians(doubleang)returnang/180.0*PI;publicstaticdoubletoDegrees(doubleang)returnang*180.0/PI;程序的可读性变差:用程序的可读性变差:用户很难理解数字或字符户很难理解数字或字符串的意思串的
26、意思程序的可维护性变差:如程序的可维护性变差:如果数值改变,则需要在很果数值改变,则需要在很多地方改动,既麻烦又易多地方改动,既麻烦又易出错出错使用常量可以增强程序的可读性、可维护性使用常量可以增强程序的可读性、可维护性Java中常量的定义规则加入final 关键字代表常量,加入static 关键字代表类变量尽量使用含义直观的常量来表示那些将在程序中多次出现的数字或字符串39publicclassAccpStudentpublicstaticfinalintFEMALE=1;/代表女性代表女性publicstaticfinalintMALE=2;/代表男性代表男性privateintsex;/
27、性别性别publicvoidsetSex(intsex)if(sex=FEMALE)System.out.println(这是一名女学生这是一名女学生);elseif(sex=MALE)System.out.println(这是一名男学生这是一名男学生);this.sex=sex;在Java接口中声明常量在Java 接口中声明的变量在编译时会自动加上static final的修饰符,即声明为常量,因而Java接口通常是存放常量的最佳地点40publicinterfaceAccpSchoolTypepublicstaticfinalStringACCP=ACCP加盟中心加盟中心;publicst
28、aticfinalStringBENET=BENET直营中心直营中心;publicinterfaceAccpSchoolTypeStringACCP=ACCP加盟中心加盟中心;StringBENET=BENET直营中心直营中心;等同于等同于编写一个用于放置常量的Java接口Constants,具有常量MAX和MIN编写一个测试类ConstantsTest,在main方法中求取Constants中的两个常量之差41Constants完整代码实现完整代码实现ConstantsTest完整代码实现完整代码实现示例Contents42小结通常定义一个接口,存放了该项目中的所有常量43OO思想总结OO基
29、本基本特征特征定义定义具体实现方式具体实现方式优势优势封装封装隐藏实现细节,对外提供隐藏实现细节,对外提供公共的访问接口公共的访问接口属性私有化、添加公有的属性私有化、添加公有的setter、getter方法方法增强代码的可维增强代码的可维护性护性继承继承从一个已有的类派生出新从一个已有的类派生出新的类,子类具有父类的一的类,子类具有父类的一般特性,以及自身特殊的般特性,以及自身特殊的特性特性继承需要符合的关系:继承需要符合的关系:is-a1、实现抽象(抽、实现抽象(抽出像的部分)出像的部分)2、增强代码的可、增强代码的可复用性复用性多态多态同一个实现接口,使用不同一个实现接口,使用不同的实例
30、而执行不同操作同的实例而执行不同操作通过通过Java接口接口/继承来定义继承来定义统一的实现接口;通过方法统一的实现接口;通过方法重写为不同的实现类重写为不同的实现类/子类定子类定义不同的操作义不同的操作增强代码的可扩增强代码的可扩展性、可维护性展性、可维护性4445publicinterfaceIntroduceablepublicStringdetail();publicvoidintroduction()detail();privatevoidshowMessage();voidspeak();Java接口中的方法必须是接口中的方法必须是publicJava接口中不能有方法体实现接口中不能有方法体实现编译器会自动加上编译器会自动加上public修饰符修饰符请指出下列请指出下列Java代码中的错误。代码中的错误。扩展案例146扩展案例247