java面向对象程序设计第五章.ppt_第1页
java面向对象程序设计第五章.ppt_第2页
java面向对象程序设计第五章.ppt_第3页
java面向对象程序设计第五章.ppt_第4页
java面向对象程序设计第五章.ppt_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

Java初级,第五章面向对象(中),主要内容,面向对象的特征封装继承类的多态,面向对象的特征,面向对象的特征,用面向对象语言例如Java所编的程序就一定是面向对象程序吗?回答是否定的,关键看是否用了面向对象的基本特征。面向对象特征主要有:封装、继承与多态。,封装,封装的定义,概念:利用抽象数据类型将数据和基于数据的操作封装在一起,数据被保存在抽象数据类型内部,系统的其他部分只有通过对象被授权的操作,才能访问这个数据。意义自定义数据类型更完善类内部实现细节的变化不会影响外部使用类/对象中的内部数据更安全符合“高内聚、低耦合”的软件设计要求,一个例子,classFighterPlaneprivateStringname;privateintmissileNum;publicvoidsetName(String_name)if(_name!=null)name=_name.trim();publicvoidsetNum(int_missileNum)if(_missileNum0)missileNum=_missileNum;,publicvoidfire()if(missileNum0)System.out.println(“nowfireamissile!”);elseSystem.out.println(“Nomissileleft!”);/endclass,访问控制,体现封装,则需要掌握访问控制public,protected,private,“缺省”的用法。在java中这些修饰符可以修饰的种类有3种:修饰类修饰类的属性成员(域)修饰类的成员方法,权限依次增大,访问控制注意,两个类同写在一个文件中,只能有一个类为public;对象之间方法调用,访问修饰符为protected,应用范围为“B”;产生对象时,类的构造方法前修饰符为private,则只能在类的内部产生对象,从而引出“单件模式”;子类继承,当访问修饰符为protected时,应用范围为“BC”。,访问控制举例1,packagecom.resource;publicclassFighterPlanepublicStringname;publicintmissileNum;publicvoidfire()if(missileNum0)System.out.println(nowfireamissile!);missileNum-=1;elseSystem.out.println(Nomissileleft!);,packagecom.run;importcom.resource.*;publicclassRunPlanepublicstaticvoidmain(Stringargs)FighterPlanefp=newFighterPlane();=苏35;fp.missileNum=6;fp.fire();,访问控制举例2,packagecom.resource;publicclassFighterPlanepublicstaticStringname=苏35;,packagecom.run;importcom.resource.*;publicclassRunPlanepublicstaticvoidmain(Stringargs)System.out.println(FighterP);,访问控制举例3(单件模式),packagecom.resource;publicclassFighterPlaneprivateStringname;privateintmissileNum;privatestaticFighterPlanefp;privateFighterPlane(String_n,int_mn)name=_n;missileNum=_mn;publicstaticFighterPlanegetInstance(String_n,int_mn)if(fp=null)fp=newFighterPlane(_n,_mn);returnfp;publicvoidfire()if(missileNum0)System.out.println(nowfireamissile!);missileNum-=1;elseSystem.out.println(Nomissileleft!);,packagecom.run;importcom.resource.*;publicclassRunPlanepublicstaticvoidmain(Stringargs)FighterPlanefp;fp=FighterPlane.getInstance(苏35,6);fp.fire();,访问控制举例4(演示),packagecom.resource;publicclassFighterPlaneprotectedStringname;protectedintmissileNum;publicvoidfire()if(missileNum0)System.out.println(fireamissile!);missileNum-=1;elseSystem.out.println(Nomissileleft!);/endclass,packagecom.run;importcom.resource.*;publicclassRunPlaneextendsFighterPlaneprivatevoidinit()name=su35;missileNum=5;publicstaticvoidmain(Stringargs)FighterPlanefp=newFighterPlane();=“苏35”;/error!fp.missileNum=6;/error!fp.fire();/endclass,访问控制举例5,classTestprivateintvalue;publicstaticvoidmain(Stringargs)Testt=newTest();System.out.println(t.value);,消息,消息的实质就是引用向对象发出的服务请求,是对数据成员和成员方法的调用,例如和fp.fire()就是发送消息,消息(Cont),能否发送消息取决于:引用必须引用了特定的对象,否则会在运行时抛出NullPointerException异常。(举个例子)对象必须定义了相应的属性或方法,否则编译不会通过被访问的属性或方法必须具有可访问的权限,也就是说和封装的内容相互关联,消息(Cont),当fp作为A对象的属性时,A对象就可以向FighterPlane发送消息,控制FighterPlane产生相应的操作。同时,当FighterPlane中也有A对象的引用时,它也可向A对象发送消息,控制A产生相应的操作,它们之间就存在关联关系了,消息(代码示例),classFighterPlaneStringname;intmissileNum;publicFighterPlane(String_name,int_missileNum)name=_name;missileNum=_missileNum;publicvoidfire()if(missileNum0)System.out.println(fireamissile!);missileNum-=1;elseSystem.out.println(Nomissileleft!);,classAFighterPlanefp;publicA(FighterPlanefpp)this.fp=fpp;publicvoidinvoke()/发送消息给FighterPlane的对象System.out.println();publicclassRunpublicstaticvoidmain(Stringargs)FighterPlaneftp=newFighterPlane(su35,10);/产生A对象,并将ftp对象引用作为参数传入Aa=newA(ftp);/发送消息,产生调用关系a.invoke();,继承,继承,通过extends关键字实现;子类可以从父类继承所有非private的属性和方法作为自己的成员;,继承举例,classPlaneprotectedStringname;publicvoidsetName(String_name)name=_name;publicStringgetName(String_name)returnname;,classFighterPlaneextendsPlaneprivateintmissileNum;publicvoidsetNum(int_missileNum)missileNum=_missileNum;publicvoidfire()missileNum-=1;,PlaneprotectedStringname;publicvoidsetName(String_name)publicStringgetName(),FightPlaneprivateintmissileNum;publicvoidsetNum(int_missileNum)publicvoidfire(),FightPlaneprotectedStringname;privateintmissileNum;publicvoidsetName(String_name)publicStringgetName()publicvoidsetNum(int_missileNum)publicvoidfire(),继承效果如下:,当name前的修饰符为public时:,PlanepublicStringname;publicvoidsetName(String_name)publicStringgetName(),FightPlaneprivateintmissileNum;publicvoidsetNum(int_missileNum)publicvoidfire(),FightPlanepublicStringname;privateintmissileNum;publicvoidsetName(String_name)publicStringgetName()publicvoidsetNum(int_missileNum)publicvoidfire(),继承效果如下:,当name前的修饰符为private时:,PlaneprivateStringname;,FightPlaneprivateintmissileNum;publicvoidsetNum(int_missileNum)publicvoidfire(),FightPlaneprivateintmissileNum;publicvoidsetNum(int_missileNum)publicvoidfire(),继承效果如下:,当name前的修饰符为private时:,PlaneprivateStringname;publicvoidsetName(int_name)publicStringgetName(),FightPlaneprivateintmissileNum;publicvoidsetNum(int_missileNum)publicvoidfire(),FightPlaneprivateStringname;privateintmissileNum;publicvoidsetName(String_name)publicStringgetName()publicvoidsetNum(int_missileNum)publicvoidfire(),继承效果如下:,注意:子类在继承父类的时候,首先应该满足父类可被访问,因为子类有可能和父类不在同一个包内凡是修饰符为public或是protected的父类属性成员或是方法能够被子类所访问;private的属性成员或是方法不能被子类访问private属性成员其所以能被子类访问,关键在于子类获得了父类setName和getName的访问权,但是子类在其内部无法直接访问父类私有变量name,Object类是所有类的共同祖先,即使定义类时没有写extentsObject在Object当中定义了许多方法,这些方法都可以被所有子类所继承,Object类,FrameWork半成品软件继承java.applet包中的Applet类编写Applet程序继承javax.servlet.http包中的HttpServlet类编写servlet程序,在框架编程中的应用,继承的作用:代码复用最终类:final修饰的类,不能被继承,继承强调两点,多态,多态的定义,多态的概念:多态是指一个程序中同名的不同方法共存的情况Java中提供两种多态的机制:重载(overloading)与覆盖(overriding),类Parent中有两个getScore方法,它们的参数有所不同,classParentpublicintgetScore()return3;publicintgetScore(inti)returni;,重载例1,重载例2,publicAudioClipgetAudioClip(URLurl)。;publicAudioClipgetAudioClip(URLurl,Stringname)try/通过重新构造一个新的URL对象,之后调用上面的同名方法来实现功能。returngetAudioClip(newURL(url,name);catch(MalformedURLExceptione)returnnull;,如:classApplet,重载例3,publicbooleanaddAll(Collectionc)returnaddAll(size,c);/size是链表长度,此方法调用下面的方法,将传入对象插入到指定链表尾部/index是链表的当前索引号publicbooleanaddAll(intindex,Collectionc),再如:java.util.ClassLinkedList,子类对父类的同名方法(方法名称相同,参数相同,返回类型相同)重新进行定义,即在子类中定义与父类中已定义的相同名而内容不同的方法。方法名称相同,参数名称相同,返回类型相同:覆盖方法名称相同,参数名称不同:重载方法名称相同,参数名称相同,返回类型不同:编译不能通过,覆盖,classParentpublicintgetScore()return3;publicStringgetCountryName()return“China”;,覆盖例1,c

温馨提示

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

最新文档

评论

0/150

提交评论