第6章接口和多态.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
【例6-3】修改例5-6,改用接口方式替代抽象类实现电子产品商店,分别在子类中实现广告的功能。 6.4 多态 多态是面向对象的第三大特征,它的实现实质上是由向上转型(Upcasting,也称为向上映射)和动态绑定(Dynamic Binding)机制完成的。 * 6.4.1向上转型的概念 子类的对象可以赋值给父类的对象,也就是子类对象可以向上转型为父类类型。 向上转型是安全的。 * 向上转型示意图 6.4.2 向上转型的应用 1)当一个子类对象(Garfield)转型为父类(mycat)以后,就被当成父类的对象,所能调用的方法会减少,只能调用父类定义的方法,而不能调用父类没有,而子类有的方法。 * 例如:CartoonCat里定义showonTV()方法,而Cat里没有,如果Garfield向上转型为mycat后, 以下的调用是无效的: Garfield.showonTV(); //NO!NO! 2)如果在父类和子类中都提供了相同的方法,而此方法被转型后的对象使用,那么系统将会调用哪一个类中的方法? * 系统将会自动调用子类中的方法 例如:Cat和CartoonCat里都定义有相同的方法bite(),CartoonCat类的 Garfield 被转型为Cat类的 mycat后, mycat = Garfield; mycat.bite(); //调用CartoonCat类中的bite(); * 原因是Java提供了动态绑定机制,能识别出对象转型前的类型,从而自动调用该类的方法。 6.4.3 静态绑定和动态绑定 绑定: 将一个方法调用同一个方法主体连接到一起 静态绑定:也就是在编译时编译器就能准确地判断应该调用哪个方法。 动态绑定:程序在运行期间由JVM自动地判断应该调用那个方法。 * 以愤怒的小鸟为例,创建一个类AngryBird, 派生出BlueBird, WhiteBird, RedBirds三个子类,定义并初步实现了两个方法chirp()和shoot(): class AngryBird { void chirp() {} void shoot() {} } * 子类具体代码如下: //类BlueBird class BlueBird extends AngryBird { void chirp() { System.out.println(Blue bird chirp...); } void shoot() { System.out.println(spawn 3 children bird...); } } //类WhiteBird class WhiteBird extends AngryBird { void chirp() { System.out.println(WhiteBird chirp); } void shoot() { System.out.println(bomb...); } } //类RedBird class RedBird extends AngryBird{ void chirp() { System.out.println(RedBird chirp); } void shoot() { System.out.println(shoot shoot...); } * 以静态绑定方式实现 public class Hitgreenpig{ public static void main(String[] args) { BlueBird one = new BlueBird(); one.chirp(); //通过对象调用方法,属于静态绑定 one.shoot(); WhiteBird two = new WhiteBird(); two.chirp(); two.shoot(); RedBird three = new RedBird(); three.chirp(); three.shoot(); } } 以动态绑定方式实现 public class Hitgreenpig { public static void main(String[] args) { AngryBird[] s = new AngryBird[3]; //生成父类对象数组 int n; for(int i = 0; i s.length; i++) { n = (int)(Math.random(

文档评论(0)

xiaofei2001128 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档