7-java继承与多态.ppt

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
java核心:继承与多态 本章主要内容: 1、什么是多态? 面向对象思想“接口与实现分离” 多态原理:后期绑定 2、多态的应用 覆盖方法 抽象类 接口 3、多态设计的原则 从小棍游戏到博弈游戏 构造函数不能多态 继承还是组合? 1、面向对象思想-继承 许多人认为代码重用是面向对象程序设计提供的最伟大的一种杠杆。 面向对象学者的口号:我们再也不想发明相同的车轮了! 我们费尽心思做出一个程序后,假如不得不又新作一个程序实现大致相同的功能,那会是一件非常令人灰心的事情。但若能利用现成的代码,对其进行“克隆”,再根据情况进行添加和修改,情况就显得理想多了。“继承”正是针对这个目标而设计的。但继承并不完全等价于克隆。 继承:一个子类继承了其父类的属性和方法。 在Java 语言中,继承是通过extends 关键字实现的。 1、面向对象思想-多态 在享受继承带来的好处时,接口却不能重用.不仅不能重用,继承树还会产生更多的接口让我们头疼. 如何管理继承树的接口,使其稳定统一,同时又能容纳不断新增的多样化实现呢? 多态——使一个统一的对象行为,在实现中呈现多种形态,可以表现父类的行为,也可以表现为子类行为。 1、多态的思想-接口与实现分离 父类的接口,被子类继承.即函数名称和参数列表在继承中保持不变,只改变函数的实现体. 例:class Instrument{ void play(Note t){} } //乐器类 class Wind extends Instrument {//管乐类 void play(Note t){System.out.println(“wind play!”);}} class Stringed extends Instrnment {//弦乐类 void play(Note t){System.out.println(“stringed play!”);}} class Brass extends Instrument {//铜管类 void play(Note t){System.out.println(“brass play!”);}} 1、多态的思想-接口与实现分离 需要调用父类和子类共有的接口时, (1)先定义父类的对象引用, 例: Instrument f; (2)然后根据实际情况创建父类或子类对象,传给该对象引用. 例: f = new Wind(); (3)现在你可以用该对象引用调用共有的接口了. 例: f.play(note); (4)改变引用指向的对象,重新调用共有接口. 例: f = new Stringed(); f.play(note); 多态效果:同一条接口调用语句,适用于继承树上所有对象. 1、多态应用示例 class Music { public void tune(Instrument i){ i.play(...); } //曲调,引用乐器类 public Instrument randInstrument() { //随机抽取乐器 switch((int)(Math.random()*3)){ default: case 0: return new Wind(); case 1: return new Stringed(); case 2: return new Brass(); } } public static void main(String args[]) { //随机乐器演奏曲调 Instrument f = randInstrument(); tune(f); } 1、多态的原理-后期绑定 只写一份函数,接收父类作为参数,却在程序执行时根据对象情况,表现不同子类的行为呢? 过程化程序只能在程序执行前期,由编译和连接器完成所有函数的绑定,叫做前期绑定。 java可以在编译以后,由JVM在程序执行中动态绑定函数,叫做后期绑定。 java除了final函数以外,所有函数都后期绑定 1、多态的优点-可扩充性 扩展一个类,而不必重定义和重编译它们.这是面向对象编程的最大特点. 当上例的乐器增加,方法增加,tune函数不变,所有新类与旧类相安无事。 2、多态的应用1-覆盖方法 java.lang.Object public class Object { public String toString(); } //返回一个描述其对象的字符串 小棍游戏继承Object, 覆盖toString方法来得到游戏结果 public class OneRowNim extends Object { public String toS

文档评论(0)

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

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

1亿VIP精品文档

相关文档