6.Java类的接口.ppt_第1页
6.Java类的接口.ppt_第2页
6.Java类的接口.ppt_第3页
6.Java类的接口.ppt_第4页
6.Java类的接口.ppt_第5页
免费预览已结束,剩余25页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

,GraphicDesignTraining,面向对象编程基础之接口和抽象,TRAININGCOURSE.1,2014-06,主讲人:唐睿,【章程目标】,Java继承的回顾接口的概念(what)为什么要使用接口(why)如何实现接口(when+how)Java的抽象类和抽象方法抽象类和抽象方法的定义,3,举例说明在什么样的情况下,需要使用到继承?在Java程序中,多态性带给我们的好处是什么?,【回顾】,4,一个Java接口是一些方法特征的集合,但没有方法的实现,publicinterfaceSocketpublicvoidpower();,classTVimplementsSocketpublicvoidpower()System.out.println(play.);,Java接口中定义的方法在不同的地方被实现,可以具有完全不同的行为,这是Java接口,相当于三孔插座,classWasherimplementsSocketpublicvoidpower()System.out.println(wash.);,电视洗衣机都能通过三孔插座供电,但行为完全不同,【什么是的接口】,5,publicclassAssemblerpublicstaticvoidmain(Stringargs)Sockettv=newTV();Socketwa=newWasher();tv.power();wa.power();,可以使用Java接口标识类型运行时,根据实际创建的对象类型调用相应的方法实现,play.wash.,控制台输出,2,1,【什么是接口】,6,刘备是汉室宗亲,那么他是继承了汉室血统的官二代,但是他后来又变成了蜀国的皇帝,他有领导蜀国的职责。,汉室宗亲,蜀国皇帝,坑爹呢这是,【为什么需要接口】,7,刘备继承了汉室皇族的血脉,他的本质是汉室宗亲。这是继承关系刘备是蜀国皇帝,这是他的职责和权力,这是他的职能。接口就是职能。也就是继承树外的能力,【为什么需要接口】,8,曹操是汉贼,但是他是魏国皇帝刘备、曹操属于两种不同的家族(基类不同),无法通过“is-a”找到一个合适的父类(家族)曹操、刘备都存在一个共同的身份:皇帝,他们当皇帝方法有各自不同的实现,但是他们同样都对国家做了“治理”的动作。,定义一个Java接口,在其中定义治理方法,但没有具体实现,各自当皇帝有各自的方法,【为什么需要接口】,9,这时候,应该怎样实现刘备和曹操这样的情况呢?,publicinterfaceEmperorpublicvoidmanage(Stringcountry);,publicclassLiubeiextendsHanshiimplementsEmperorpublicvoidmanage(Stringcountry)getZhugeliang().manage(country);,通过Java接口,我们同样可以享受到多态性的好处,大大提高了程序的可扩展性及可维护性,publicclassCaocaoextendsTraitorimplementsEmperorpublicvoidmanage(Stringcountry)this.manage(country);,Emperorliu=newLiubei();Emperorcao=newCaocao();liu.manage(蜀国);cao.manage(魏国);,【为什么需要接口】,10,为我们的打地鼠游戏更换一种新的设计:在一个洞里有三种物体可能出现:企鹅、北极熊(Bear)、炸弹(Bomb)企鹅和北极熊必须继承于动物类,会吃饭睡觉。设计一个可打击接口(Beatable),该接口有(beatIt)方法,用来打击该对象为各种物体实现可打击接口编写测试类BeatItTest进行测试,要求:不时从不同位置出现各种东西。输入位置来打它们。,【回顾】,11,开发系统时,主体构架使用接口,接口构成系统的骨架这样就可以通过更换接口的实现类来更换系统的实现,publicclassBoomimplementsBeatablepublicvoidbeatIt()System.out.println(爆炸);,publicclassPenguinextendsAnimalimplementsBeatablepublicvoidbeatIt()System.out.println(哇);,Beatableb1=newBoom();Beatableb2=newPenguin();b1.beatIt();b2.beatIt();,【面向接口编程】,12,演示实现:升级上述的打地鼠游戏,要求如下:添加一个动物和炸弹被打后的反馈反馈有三种动作:加分、减分、游戏结束游戏主控类需要根据反馈对游戏进行控制设计三种可打对象企鹅、海豹、炸弹,并实现其Beatable接口设计反馈接口,反馈的效果是:打一下企鹅+10分,打一下海豹-10分,打一下炸弹游戏结束。系统要具备良好的可扩展性与可维护性,【面向接口编程示例】,13,采用面向接口编程的方式实现,以下是三个步骤中的第一步:,抽象出Java接口1、分析:无论动物还是炸弹在被打后都能进行反馈。反馈动作有加分减分和游戏结束2、结论:抽象出Java接口Feedback,在其中定义方法good,bad,gameOver3、具体实现:,publicinterfaceFeadbackpublicvoidgood(intprice);publicvoidbad(intprice);publicvoidgameOver();,【面向接口编程示例】,14,采用面向接口编程的方式实现,以下是三个步骤中的第二步:,publicclassBeatItGameMainimplementsFeedbackprivateintprice;publicvoidgood(intprice)this.price+=price;publicvoidbad(intprice)this.price-=price;/gameOver实现.,实现Java接口1、分析:已经抽象出Java接口Feedback,并在游戏控制里添加对反馈的处理2、结论:游戏控制类实现Feedback接口,实现good,bad,gameOver方法3、具体实现:,【面向接口编程示例】,15,采用面向接口编程的方式实现,以下是三个步骤中的第三步:,使用Java接口1、分析:主体构架使用接口,让接口构成系统的骨架2、结论:更换实现接口的类就可以更换系统的实现3、具体实现:,publicclassPenguinimplementsBeatablepublicvoidbeatIt(Feedbackfb)fb.good(10);,publicclassSealimplementsBeatablepublicvoidbeatIt(Feedbackfb)fb.bad(30);,【面向接口编程】,接口可以继承,必须实现接口继承树上的所有接口方法,可以在继承树上对接口继承使用多态,publicinterfaceSocket2voidpower2();,publicclassTVimplementsSocket3Overridepublicvoidpower2()Overridepublicvoidpower3(),publicinterfaceSocket3extendsSocket2voidpower3();,【接口的继承】,17,阅读如下Java代码,然后请采用面向接口编程的思想,在空白处填写正确的代码,publicinterfacePCIvoidstart();voidstop();,classSoundCardimplementsPCIpublicvoidstart()System.out.println(Dudu.);publicvoidstop()System.out.println(Soundstop!);,classNetworkCardimplementsPCIpublicvoidstart()System.out.println(Send.);publicvoidstop()System.out.println(Networkstop!);,这是Java接口,相当于主板上的PCI插槽的规范,声卡、网卡都实现了PCI插槽的规范,但行为完全不同,【小结】,18,publicclassMainBoardpublicvoidusePCICard(_p)p.start();p.stop();,publicclassAssemblerpublicstaticvoidmain(Stringargs)MainBoardmb=newMainBoard();/在主板上插入网卡/在主板上插入声卡,提示:通过这个方法,主板上可以插入任意符合PCI插槽规范的卡,PCInc=newNetworkCard();mb.usePCICard(nc);,PCIsc=newSoundCard();mb.usePCICard(sc);,PCI,提示:可以通过更换实现接口的类来更换系统的实现,【小结】,19,生活中,一周有七天,如何用代码表示?,publicclassWeekprivateintdays=7;publicstaticvoidmain(Stringargs)Weekw=newWeek();System.out.println(一周有+w.days+天);,publicclassWeekprivateintdays=7;publicstaticvoidmain(Stringargs)Weekw=newWeek();w.days+;System.out.println(一周有+w.days+天);,一周有7天,控制台输出,然而,你可能不会意识到事情正在悄悄改变:,一周有8天,控制台输出,如何保证变量的值在运行期无法被改变?使用常量,【常量】,20,常量是一种标识符,它的值在运行期间恒定不变常量标识符在程序中只能被引用,而不能被重新赋值,【为什么是常量】,21,如果不使用常量,直接在程序中填写数字或字符串,将会有什么麻烦?,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;,程序的可读性变差:用户很难理解数字或字符串的意思,程序的可维护性变差:如果数值改变,则需要在很多地方改动,既麻烦又易出错,使用常量可以增强程序的可读性、可维护性,【常量的优点】,22,加入final关键字代表常量,加入static关键字代表类变量尽量使用含义直观的常量来表示那些将在程序中多次出现的数字或字符串,publicclassZyStudentpublicstaticfinalintFEMALE=1;/代表女性publicstaticfinalintMALE=2;/代表男性privateintsex;/性别publicvoidsetSex(intsex)if(sex=FEMALE)System.out.println(这是一名女学生);elseif(sex=MALE)System.out.println(这是一名男学生);this.sex=sex;,【Java中常量定义的规则】,23,在Java接口中声明的变量在编译时会自动加上staticfinal的修饰符,即声明为常量,因而Java接口通常是存放常量的最佳地点,publicinterfaceConstantspublicstaticfinalintPI=3.14159265358979323846;,publicinterfaceConstantsintPI=3.14159265358979323846;,等同于,【在java接口中生命常量】,24,编写一个用于放置常量的Java接口Constants,具有常量MAX和MIN编写一个测试类ConstantsTest,在main方法中求取Constants中的两个常量之差,【小结】,25,【面向对象编程思路总结】,26,publicinterfaceIntroduceablepublicStringdetail();publicvoidintroduction()detail();privatevoidshowMessage();voidspeak();,Java接口中的方法必须是public,Java接口中不能有方法体实现,编译器会自动加上public修饰符,请指出下列Java代码中的错误。,【总结回顾】,在面向对象的概念中我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论