版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象的Java实现-接口第八章1回顾举例说明在什么样的情况下,需要使用到继承?在Java程序中,多态性带给我们的好处是什么?2预习检查什么是常量?Java中,常量的定义规则有哪些?什么是面向接口编程,它的好处是什么?3本章任务升级HelloACCP,打印ACCP中心与教员的详细信息:正确使用面向接口编程的思想提高系统的可扩展性及可维护性4掌握Java接口理解Java接口与多态的关系掌握面向接口编程的思想掌握常量接口的使用本章目标5生活中的接口电脑主板上的PCI插槽的规范就类似于Java接口声卡显卡网卡每种卡的内部结构都不相同,可以把声卡、网卡、显卡都插在PCI插槽上,而不用担心哪个插槽是专门插哪个卡的主板6什么是Java接口2-1一个Java接口是一些方法特征的集合,但没有方法的实现publicinterfacePCI{
publicvoidstart();
publicvoidstop();
}classSoundCardimplementsPCI{publicvoidstart()
{
System.out.println("Du
du...");
}
publicvoidstop()
{
System.out.println("Soundstop!");
}
}Java接口中定义的方法在不同的地方被实现,可以具有完全不同的行为这是Java接口,相当于主板上的PCI插槽的规范classNetworkCardimplementsPCI{publicvoidstart()
{
System.out.println("Send...");
}
publicvoidstop()
{
System.out.println("Networkstop!");
}
}声卡、网卡都实现了PCI插槽的规范,但行为完全不同7什么是Java接口2-2publicclassAssembler{
publicstaticvoidmain(String[]args){
PCInc=newNetworkCard();
PCIsc=newSoundCard();
nc.start();
sc.start();
}
}可以使用Java接口标识类型运行时,根据实际创建的对象类型调用相应的方法实现Du
du...Send...控制台输出218为什么需要Java接口5-1为ACCP各中心开发这样一个小系统,包含类型:教员、中心、打印机,具体要求如下:教员、以及中心都具有方法:输出详细信息中心具有属性:打印机,能够通过中心的打印机打印教员或中心的详细信息系统要具备良好的可扩展性与可维护性打印教员中心教员
详细信息中心
详细信息detail方法(输出详细信息)9为什么需要Java接口5-2以下这个解决方案中存在着什么问题?publicclassAccpTeacher1{//输出教员的详细信息publicStringdetail(){ return"本人是ACCP教员";}}publicclassAccpSchool1{privatePrinterprinter=newPrinter();//输出中心的详细信息publicStringdetail(){return"这里是ACCP中心";}//使用打印机打印教员信息publicvoidprint(AccpTeacher1t){printer.print(t.detail());}//使用打印机打印中心信息publicvoidprint(AccpSchool1s){
printer.print(s.detail());}}publicclassPrinter{publicvoidprint(Stringcontent){System.out.println("开始打印:");System.out.println(content);}}每增加一种新类型,都需要增加相应的print(类型名称var)方法——程序的可扩展性及可维护性极差——这不符合系统的要求10为什么需要Java接口5-3可以通过多态性解决这个问题吗?显然,本系统符合使用多态性的条件教员中心detail方法(负责输出详细信息)教员
详细信息中心
详细信息1221回顾多态的含义:实现同一个接口,使用不同的实例而执行不同操作11为什么需要Java接口5-4在这个系统中,存在继承关系吗?教员、中心属于两种不同的类型,无法通过“is-a”找到一个合适的父类教员、中心都存在一个共同的方法特征:detail,它们对detail方法有各自不同的实现——这完全符合Java接口的定义定义一个Java接口,在其中定义detail方法,但没有具体实现实现这个Java接口,不同的类对detail方法有不同的具体实现IntroduceableAccpTeacher2(教员)AccpSchool2(中心)12为什么需要Java接口5-5publicinterfaceIntroduceable{publicStringdetail();}publicclassAccpSchool2
implementsIntroduceable{privatePrinterprinter=newPrinter();//输出中心的详细信息publicStringdetail(){return"这里是ACCP中心";}//使用中心打印机打印信息publicvoidprint(Introduceable
intro){
printer.print(intro.detail());}}publicclassAccpTeacher2
implements
Introduceable{//输出教员的详细信息publicStringdetail(){ return"本人是ACCP教员";}}通过Java接口,我们同样可以享受到多态性的好处,大大提高了程序的可扩展性及可维护性使用print方法时,参数可以是任何Introduceable接口的实现类的对象,不必再为不同的类型建立不同的print方法了使用了Java接口之后,这个系统有了怎样的改进?13小结1为刚才完成的系统增加一种新的类型:学员(AccpStudent),具体要求如下:学员具有detail方法,负责输出学员详细信息能够通过中心的打印机打印学员的详细信息系统要具备良好的可扩展性与可维护性编写测试类StudentTest进行测试,要求:通过中心的打印机打印学员的详细信息StudentTest完整代码实现AccpStudent完整代码实现14作业问题:类:鼠标(mouse)打印机(printer)U盘(UDisk)电脑(computer)接口:USB接口(USB)15什么是面向接口编程开发系统时,主体构架使用接口,接口构成系统的骨架这样就可以通过更换接口的实现类来更换系统的实现publicclassAccpSchool2implementsIntroduceable
{privatePrinterprinter=newPrinter();publicStringdetail(){return"这里是ACCP中心";}//使用中心打印机打印信息publicvoidprint(Introduceableintro){
printer.print(intro.detail());}}IntroduceableAccpTeacher2(教员)AccpSchool2(中心)16面向接口编程的示例4-1升级上述的ACCP系统,要求:打印机有多种类型,比如:黑白打印机、彩色打印机等中心可能配备其中任意一款打印机,负责打印教员、或者中心的详细信息系统要具备良好的可扩展性与可维护性print方法(打印)彩色打印机黑白打印机黑白内容中心/教员详细信息彩色内容17面向接口编程的示例4-2采用面向接口编程的方式实现,以下是三个步骤中的第一步:抽象出Java接口1、分析:黑白、彩色打印机都存在一个共同的方法特征:print黑白、彩色打印机对print方法有各自不同的实现2、结论:抽象出Java接口PrinterFace,在其中定义方法print3、具体实现:publicinterface
PrinterFace{publicvoid
print(Stringcontent);}18面向接口编程的示例4-3采用面向接口编程的方式实现,以下是三个步骤中的第二步:publicclassColorPrinter
implements
PrinterFace{publicvoid
print(Stringcontent){
System.out.println("彩色打印:");
System.out.println(content);}}publicclassBlackPrinter
implements
PrinterFace{publicvoid
print(Stringcontent){
System.out.println("黑白打印:");
System.out.println(content);}}实现Java接口1、分析:已经抽象出Java接口PrinterFace,并在其中定义了print方法黑白、彩色打印机对print方法有各自不同的实现2、结论:黑白、彩色打印机都实现PrinterFace接口,各自实现print方法3、具体实现:19面向接口编程的示例4-4采用面向接口编程的方式实现,以下是三个步骤中的第三步:使用Java接口1、分析:主体构架使用接口,让接口构成系统的骨架2、结论:更换实现接口的类就可以更换系统的实现3、具体实现:publicclassAccpSchool3implementsIntroduceable{privatePrinterFaceprinter;//打印机
publicvoidsetPrinter(PrinterFacep){
this.printer=p;}publicStringdetail(){return"这里是ACCP中心";}publicvoidprint(Introduceableintro){
printer.print(intro.detail());}}publicclassAccpTest{publicstaticvoidmain(String[]args){//创建中心实例
AccpSchool3school=newAccpSchool3();//为该中心配备黑白打印机
school.setPrinter(new
BlackPrinter());
school.print(school);//为该中心配备彩色打印机
school.setPrinter(new
ColorPrinter());
school.print(school);}}20小结2阅读如下Java代码,然后请采用面向接口编程的思想,在空白处填写正确的代码publicinterfacePCI{
void
start();
void
stop();
}classSoundCard
implementsPCI{publicvoidstart()
{
System.out.println("Du
du...");
}
publicvoidstop()
{
System.out.println("Soundstop!");
}
}classNetworkCard
implementsPCI{publicvoidstart()
{
System.out.println("Send...");
}
publicvoidstop()
{
System.out.println("Networkstop!");
}
}这是Java接口,相当于主板上的PCI插槽的规范声卡、网卡都实现了PCI插槽的规范,但行为完全不同21小结2publicclassMainBoard{
publicvoidusePCICard(______p)
{
p.start();
p.stop();
}
}publicclassAssembler{
publicstaticvoidmain(String[]args)
{
MainBoard
mb=newMainBoard();
//在主板上插入网卡
//在主板上插入声卡
}
}提示:通过这个方法,主板上可以插入任意符合PCI插槽规范的卡PCInc=newNetworkCard();mb.usePCICard(nc);
PCIsc=newSoundCard();
mb.usePCICard(sc);PCI提示:可以通过更换实现接口的类来更换系统的实现22为什么需要常量生活中,一周有七天,如何用代码表示?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天控制台输出如何保证变量的值在运行期无法被改变?——使用常量23什么是常量常量是一种标识符,它的值在运行期间恒定不变常量标识符在程序中只能被引用,而不能被重新赋值常量圆周率PI圆周率PI代码表示方式publicstaticfinaldoublePI
=3.14159265358979323846;用法将ang角度转换成径度publicstaticdoubletoRadians(double
ang){returnang/180.0*PI;}24常量的优点如果不使用常量,直接在程序中填写数字或字符串,将会有什么麻烦?publicstaticdoubletoRadians(double
ang){returnang/180.0*3.14159265358979323846;}publicstaticdoubletoDegrees(double
ang){returnang*180.0/3.14159265358979323846;}publicstatic
finaldoublePI=3.14159265358979323846;//圆周率publicstaticdoubletoRadians(double
ang){returnang/180.0*PI;}publicstaticdoubletoDegrees(double
ang){returnang*180.0/PI;}程序的可读性变差:用户很难理解数字或字符串的意思程序的可维护性变差:如果数值改变,则需要在很多地方改动,既麻烦又易出错使用常量可以增强程序的可读性、可维护性25Java中常量的定义规则加入final关键字代表常量,加入static关键字代表类变量尽量使用含义直观的常量来表示那些将在程序中多次出现的数字或字符串publicclassAccpStudent{publicstaticfinalintFEMALE=1;//代表女性publicstaticfinalintMALE=2;//代表男性privateintsex;//性别publicvoidsetSex(intsex){if(sex==FEMALE)
System.out.println("这是一名女学生");elseif(sex==MALE)
System.out.println("这是一名男学生");this.sex=sex;}}26在Java接口中声明常量在Java接口中声明的变量在编译时会自动加上staticfinal的修饰符,即声明为常量,因而Java接口通常是存放常量的最佳地点publi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度新能源出租车司机劳动合同规范范本2篇
- 2024年版:广告发布合同广告内容审核与责任分配
- 2024版二手房租赁买卖合同范本
- 2025版智能家居配套大平方楼房买卖合同3篇
- 大V账号推广合同(2篇)
- 智慧物流配送服务合作协议
- 股权转让定金协议
- 玻璃购销简单的合同范本
- 2024施工合同终止协议书范本(适用于水利工程)3篇
- 保洁劳务派遣协议书
- 业主搭建阳光房申请书
- 小学语文分层作业设计案例
- 四川旭虹光电科技有限公司曲面显示用盖板玻璃生产项目环评报告
- 伤口愈合的病理生理及湿性愈合理论-课件
- GB/T 24475-2023电梯远程报警系统
- 科技计划项目(课题)验收(结题)经费审计业务约定书
- SIS系统操作规程
- 教师书法培训教案
- 2023年上海航天技术研究院下属航天总厂校园招聘笔试参考题库附带答案详解
- 华东师大版-七年级下册数学-第6章-一元一次方程-教学课件
- 《贵州省市政工程计价定额》(2016版)
评论
0/150
提交评论