Java面向对象程序设计教程(第二版)Java对象的生命周期94.ppt

Java面向对象程序设计教程(第二版)Java对象的生命周期94.ppt

  1. 1、本文档共94页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* Java面向对象程序设计教程 * 处理与类型有关的对象: 设计时进行“if”判断 public void draw(){ //创建一个Shape类的数组对象shapes,用来存放所有扩展类对象 for(int i=0; ishapes.length; i++){ if(shapes[i] instanceof Oval) drawOval(); else if(shapes[i] instanceof Quatrangle) drawQuatrangle(); else if(shapes[i] instanceof Triangle) drawTriangle(); else if(shapes[i] instanceof Square) drawSquare(); else if(shapes[i] instanceof Rectangle) drawRectangle(); else if … } } * Java面向对象程序设计教程 * 利用多态机制的重名方式 举例:OverrideTest.java * Java面向对象程序设计教程 * 处理与类型有关的对象: 多态方式 //创建一个Shape类的数组对象shapes,用来存放所有扩展类对象 for(int i=0; ishapes.length; i++) shapes[i].draw(); 覆盖特性的体现 在Java语言中,覆盖特性仅针对非静态方法有效。当我们在一个扩展子类中重写了超类中已经定义了的同名的非静态方法后,覆盖特性体现在如果以当前扩展子类创建了一个对象,那么,子类重写的方法覆盖了超类定义的方法,它将完全关闭超类的行为,任何一次对覆盖方法的调用都必然展示自己重新定义的行为特征。 举例:OverrideSample.java * Java面向对象程序设计教程 * 覆盖特性的设计要点 在覆盖非静态方法时,扩展子类的方法可见性不能低于超类方法的可见性,例如超类方法的可见性设为“public”,那么子类方法重写时也必须把可见性设为“public”,否则编译时将会报告试图减弱访问权限的错误。 这些非静态方法的可访问作用域还必须包含其扩展子类方可被覆盖,否则即便在子类中有相同构型的方法(方法名称、参数变量类型、参数变量个数及其组合顺序相同),依然无法实现。 如果在重写方法时试图把非静态方法改成静态方法,将会引发编译错误。 * Java面向对象程序设计教程 * 静态方法的隐藏 在扩展子类中重写了超类的静态方法,那么重名静态方法体现出来的是隐藏(Hide)特性。 对于静态方法(即声明为static),子类重写的方法隐藏了超类定义的方法。 在实际应用过程中,我们对该方法的调用结果,有可能是子类定义的静态方法,也有可能是超类定义的静态方法,这取决于调用者(引用变量)所声明的类型是扩展子类还是其超类。 举例:HideSample.java * Java面向对象程序设计教程 * 隐藏特性的本质 重名静态方法的调用是基于声明类型的,其隐藏特性的本质在于静态方法采用的是静态绑定(Static Binding)机制,也称为早期绑定(Early Binding)。 采用静态绑定机制,在编译时编译器就根据声明的类型确定了该调用的方法,这样可以对代码进行优化,因此运行时效率更高,但缺少动态绑定的灵活性。 在Java语言中静态方法也称为类方法,其行为从属于类,而不是决定于某个具体的对象。按规范,用类名调用比用对象调用更加合适,因此,在声明时确定了类型,实际上已经确定了该调用的方法,而与具体创建的对象类型无关了。作为强类型语言,类型声明在编译时已知,可以采用静态绑定机制。 * Java面向对象程序设计教程 * 隐藏特性的设计要点 在隐藏静态方法时,扩展子类的方法可见性不能低于超类方法的可见性,例如超类方法的可见性设为“public”,那么子类方法重写时也必须把可见性设为“public”,否则编译时将会报告试图减弱访问权限的错误。 如果在重写方法时试图把静态方法改成非静态方法,将会引发编译错误。 * Java面向对象程序设计教程 * 方法的参数传递 按值传递(Pass-by-value)和按引用传递(Pass-by-reference)。 所谓按值传递是指在方法体内部使用的是所传递参数的一个副本,对副本的任何修改将不会影响到原来变量的状态。 所谓按引用传递是指传给方法的实际上是对象的地址,这样方法体中对对象的任何改变都将反映在该对象中,使该对象的状态发生变化。 在Java语言中,基本类型作为方法参数传递均按值传递,除此以外,所有的对象作为方法参数传递均按引用传递。 举例:MethodArgument.java * Java面向对象程序设计教

文档评论(0)

yurixiang1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档