- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
类的多态性 多态性的作用 数据抽象、继承性和多态性是面向对象编程思想的基本特性 多态性将函数的功能与实现分开,也就是说,将“做什么”与“怎样做”分开了 利用多态性,程序代码的组织以及可读性都得到了提高,也使得程序更易于扩展 充分利用多态性,可以很方便地从原有程序中“成长”出一个新的程序 类的多态性 成员的覆盖 在类的继承中,除了继承来的父类成员外,子类也可以有自己的成员 如果子类的某个成员变量或成员函数与父类的同名,子类的成员函数或成员变量将隐藏父类的同名成员,这称为成员的覆盖: class Super { int aNumber = 10; } class Subbie extends Super { double aNumber = 2.87; } 类的多态性 成员的覆盖 如果调用Subbie对象的aNumber变量,你调用的实际上是子类Subbie的浮点型成员变量,而非父类Super的整型成员变量: Subbie testSub = new Subbie(); System.out.println(testSub.aNumber); 执行这段代码,在屏幕上显示的结果是“2.87”而不是“10” 子类的aNumber变量隐藏了父类的aNumber变量,父类的同名变量无法再访问 类的多态性 成员的覆盖 在子类的内部,可以用super关键字来访问父类的同名变量: System.out.println(super.aNumber); 这段代码显示的结果是“10”,也就是父类的aNumber变量的值。 在其它类中,super关键字是无效的。例如下面的代码是错误的: System.out.println(testSub.super.aNumber); 类的多态性 成员的覆盖 但可以用父类对象变量来访问父类成员: Super testFather = testSub; System.out.println(testFather.aNumber); 在Java中,允许将父类类型的变量指向一个子类对象 但它实际指向的不是子类,而是子类对象中的父类“硬核”,因此返回的也是父类对象的值“10”。 类的多态性 成员的覆盖 不管是super关键字还是利用父类变量,它们都属于从外界访问父类,因此父类的私有成员是不能访问的 成员函数也可以覆盖,而且成员函数覆盖的作用要大得多 成员函数的覆盖允许子类从父类中继承行为接近的函数,并将它进行补充或修改,使之满足子类的特殊要求 类的多态性 成员的覆盖 例:Game及其子类的Play函数: class Game { public void Play() { System.out.println(Play a game.); } } class BoardGame extends Game { public void Play() { System.out.println(Play a board game.); } } public class Chess extends BoardGame { public void Play() { System.out.println(Play a chess.); } } 类的多态性 成员的覆盖 如果你建立一个Chess对象,调用它的Play函数时,你肯定设想的是玩象棋,而不是玩一般的游戏或桌面游戏。 Java程序可以满足这个要求: Chess myChess = new Chess(); myChess.Play(); 执行这段代码,屏幕显示的结果是“Play a chess.”。可见,Chess类的Play函数覆盖了父类和祖父类的Play函数 类的多态性 成员的覆盖 有时,希望在子类的函数中调用父类的同名函数,这可以用super关键字来实现: class BoardGame extends Game { public void Play() { super.Play(); System.out.println(Play a board game.); } } 这里重写了BoardGame.Play()函数,让它在进行自己的工作前先完成父类函数的工作 类的多态性 成员的覆盖 执行BoardGame.Play()函数,屏幕显示的结果将是: Play a game. Play a board game. 在这种情况下,子类的函数依然覆盖着父类的函数 只是在子类中调用了一遍父类函数而已 当需要对象响应同样的方法,但与超类中原来的方法有不同行为时,需要超越(抑制)该方法。用新的方法体取代原来的方法,但使用相同的方法名 例子: // app8_1, 方法的覆盖 02 class C
您可能关注的文档
- 《java高级编程教案 李学相》java高级编程教学大纲.doc
- 《java高级编程教案 李学相》第1章Java概述.ppt
- 《java高级编程教案 李学相》第7章异常处理及输入输出.ppt
- 《java高级编程教案 李学相》第八章访问数据库.ppt
- 《java高级编程教案 李学相》第二章 Java基础.ppt
- 《java高级编程教案 李学相》第九章网络编程初步.ppt
- 《java高级编程教案 李学相》第七章 多线程.ppt
- 《java高级编程教案 李学相》第三章 异常处理.ppt
- 《java高级编程教案 李学相》第四章Applet.ppt
- 《java高级编程教案 李学相》第五章 图形界面设计.ppt
- 《Java语言程序设计-李学相》chp9.ppt
- 《Java语言程序设计-李学相》chp10.ppt
- 《Linux教学课件 赵哲》Linux01-Linux简介.ppt
- 《Linux教学课件 赵哲》Linux02-Linux操作界面.ppt
- 《Linux教学课件 赵哲》Linux03-Ubuntu安装软件.ppt
- 《Linux教学课件 赵哲》Linux04-Linux文件系统.ppt
- 《Linux教学课件 赵哲》Linux05-VIM文本编辑器.ppt
- 《Linux教学课件 赵哲》Linux06-Linux磁盘与文件系统管理.ppt
- 《Linux教学课件 赵哲》Linux07-解压缩.ppt
- 《Linux教学课件 赵哲》Linux11-Shell编程II.ppt
文档评论(0)