欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    java面向对象程序设计第五章.ppt

    • 资源ID:70793320       资源大小:368.50KB        全文页数:40页
    • 资源格式: PPT        下载积分:11.9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要11.9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    java面向对象程序设计第五章.ppt

    Java 初级初级第五章面向对象(中)主要内容主要内容l面向对象的特征l封装l继承l类的多态面向对象的特征面向对象的特征面向对象的特征用面向对象语言例如Java所编的程序就一定是面向对象程序吗?回答是否定的,关键看是否用了面向对象的基本特征。面向对象特征主要有:封装、继承与多态。封装封装的定义封装的定义l概念:利用抽象数据类型将数据和基于数据的操作封装在一起,数据被保存在抽象数据类型内部,系统的其他部分只有通过对象被授权的操作,才能访问这个数据。l意义自定义数据类型更完善类内部实现细节的变化不会影响外部使用类/对象中的内部数据更安全符合“高内聚、低耦合”的软件设计要求一个例子一个例子classFighterPlaneprivateStringname;privateintmissileNum;public voidsetName(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缺省publicABprotectedB或(B+C)B缺省BBprivateDD权限依次增大权限依次增大A:所有类B:包中的类D:D:本类本类C:C:所有子类所有子类E E:包中子类:包中子类访问控制访问控制注意注意l两个类同写在一个文件中,只能有一个类为public;l对象之间方法调用,访问修饰符为protected,应用范围为“B”;l产生对象时,类的构造方法前修饰符为private,则只能在类的内部产生对象,从而引出“单件模式”;l子类继承,当访问修饰符为protected时,应用范围为“BC”。访问控制举例访问控制举例1packagecom.resource;publicclassFighterPlanepublicStringname;publicintmissileNum;publicvoidfire()if(missileNum0)(nowfireamissile!);missileNum-=1;else(Nomissileleft!);packagecom.run;importcom.resource.*;publicclassRunPlanepublicstaticvoidmain(Stringargs)FighterPlanefp=newFighterPlane();fp.name=苏35;fp.missileNum=6;fp.fire();访问控制举例访问控制举例2packagecom.resource;publicclassFighterPlanepublicstaticStringname=苏35;packagecom.run;importcom.resource.*;publicclassRunPlanepublicstaticvoidmain(Stringargs)System.out.println(FighterPlane.name);访问控制举例访问控制举例3(单件模式)(单件模式)packagecom.resource;publicclassFighterPlaneprivateStringname;privateintmissileNum;private static FighterPlane fp;private FighterPlane(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!);/endclasspackagecom.run;importcom.resource.*;publicclassRunPlaneextendsFighterPlaneprivatevoidinit()name=su35;missileNum=5;publicstaticvoidmain(Stringargs)FighterPlanefp=newFighterPlane();fp.name=“苏35”;/error!fp.missileNum=6;/error!fp.fire();/endclass访问控制举例访问控制举例5classTestprivateintvalue;publicstaticvoidmain(Stringargs)Testt=newTest();System.out.println(t.value);消息消息消息的实质就是引用向对象发出的服务请求,是对数据成员和成员方法的调用,例如fp.name和fp.fire()就是发送消息消息(消息(Cont)能否发送消息取决于:l引用必须引用了特定的对象,否则会在运行时抛出NullPointerException异常。(举个例子)l对象必须定义了相应的属性或方法,否则编译不会通过l被访问的属性或方法必须具有可访问的权限,也就是说和封装的内容相互关联消息(消息(Cont)当fp作为A对象的属性时,A对象就可以向FighterPlane发送消息,控制FighterPlane产生相应的操作。同时,当FighterPlane中也有A对象的引用时,它也可向A对象发送消息,控制A产生相应的操作,它们之间就存在关联关系了图5-5消息(代码示例)消息(代码示例)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(fp.name);publicclassRunpublicstaticvoidmain(Stringargs)FighterPlaneftp=newFighterPlane(su35,10);/产生A对象,并将ftp对象引用作为参数传入Aa=newA(ftp);/发送消息,产生调用关系a.invoke();继 承继承继承l通过extends关键字实现;l子类可以从父类继承所有非private的属性和方法作为自己的成员;继承举例继承举例classPlaneprotectedStringname;publicvoidsetName(String_name)name=_name;publicStringgetName(String_name)returnname;classFighterPlane extends PlaneprivateintmissileNum;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()继承效果如下:注意:l子类在继承父类的时候,首先应该满足父类可被访问,因为子类有可能和父类不在同一个包内l凡是修饰符为public或是protected的父类属性成员或是方法能够被子类所访问;private的属性成员或是方法不能被子类访问lprivate属性成员其所以能被子类访问,关键在于子类获得了父类setName和getName的访问权,但是子类在其内部无法直接访问父类私有变量namelObject类是所有类的共同祖先,即使定义类时没有写extentsObjectl在Object当中定义了许多方法,这些方法都可以被所有子类所继承Object类类方法名方法名说明说明备注备注Objectclone()将当前对象克隆Boolenequals(Objectobj)判断两个引用是否指向同一对象,其参数不能为普通数据类型被很多子类重载,用于用语判断对象的内容是否一致,如String,包装类,URL,File,java.util包中的类或接口等voidfinalize()对象被释放时使用ClassgetClass()获得当前对象的类对象注意Class中的首字母大写inthashCode()得到代表对象的一个整数,这个整数在应用程序运行时保持不变这个整数的意义类似对象的身份证号码,String,包装类,URL,File,java.util包中的类或接口将本方法覆盖,当内容相同时得到的hashCode值相同StringtoString()得到代表这个对象的字符串String,包装类,URL,File,java.util包中的类或接口将本方法覆盖,得到的值将是其对象内容Voidnotify用于线程同步中唤醒等待的线程Voidwait()应用于线程同步中的线程等待lFrameWork半成品软件l继承java.applet包中的Applet类编写Applet程序l继承包中的HttpServlet类编写servlet程序在框架编程中的应用在框架编程中的应用l继承的作用:代码复用l最终类:final修饰的类,不能被继承继承继承强调两点强调两点多态多态的定义多态的定义l多态的概念:多态是指一个程序中同名的不同方法共存的情况lJava中提供两种多态的机制:重载(overloading)与覆盖(overriding)类Parent中有两个getScore方法,它们的参数有所不同classParentpublicintgetScore()return3;publicintgetScore(inti)returni;重载例重载例1重载例重载例2AudioClipgetAudioClip(URLurl)根据URL获得AudioClip对象AudioClipgetAudioClip(URLurl,Stringname)根据URL和name联合构成的URL得到AudioClip对象publicAudioClipgetAudioClip(URLurl)。;publicAudioClipgetAudioClip(URLurl,Stringname)try/通过重新构造一个新的URL对象,之后调用上面的同名方法来实现功能。returngetAudioClip(new URL(url,name);catch(MalformedURLExceptione)returnnull;如:classApplet重载例重载例3BooleanaddAll(Collectionc)将一个集合对象插入到链表末尾当中。BooleanaddAll(intindex,Collectionc)将一个集合对象插入到链表的指定位置当中。publicbooleanaddAll(Collectionc)returnaddAll(size,c);/size是链表长度,此方法调用下面的方法,将传入对象插入到指定链表尾部/index是链表的当前索引号publicbooleanaddAll(intindex,Collectionc)再如:java.util.ClassLinkedList子类对父类的同名方法(方法名称相同,参数相同,返回类型相同)重新进行定义,即在子类中定义与父类中已定义的相同名而内容不同的方法。方法名称相同,参数名称相同,返回类型相同:覆盖方法名称相同,参数名称不同:重载方法名称相同,参数名称相同,返回类型不同:编译不能通过覆盖覆盖classParentpublicintgetScore()return3;publicStringgetCountryName()return“China”;覆盖例覆盖例1classSonextendsParentpublicintgetScore()return4;publicclassRunSonpublicstaticvoidmain(Stringargs)Sons=newSon();System.out.println(s.getScore();System.out.println(s.getCountryName();输出结果:4Chinal子类的访问修饰符权限应等于或大于父类lstatic方法不能覆盖非静态方法,也不能被非static方法覆盖,但是static方法可以覆盖static方法l方法前有final修饰符,此方法不能在子类方法中进行覆盖l在JDK中,很多父类的方法被子类重新覆盖,赋予了不同的含义,如Object类中的booleanequals(Objectobj)方法l抽象类中如果存在抽象方法,则具体子类必须对抽象方法进行覆盖覆盖覆盖注意注意classSuperpublicIntegergetLenght()returnnewInteger(4);publicclassSubextendsSuperpublicLongGetLenght()returnnewLong(5);publicstaticvoidmain(Stringargs)Supersooper=newSuper();Subsub=newSub();System.out.println(sooper.getLenght().toString()+,+sub.getLenght().toString();覆盖例覆盖例2输出结果:4,4

    注意事项

    本文(java面向对象程序设计第五章.ppt)为本站会员(wuy****n92)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开