- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章继承与多态讲解
第4章 继承与多态 利用继承,可以基于已经存在的类构造新类,还可以在新类中添加一些新的成员或修改继承了的成员,以满足新的需求。 而多态是在继承的基础上引出的,可以解决子类父类中的成员重名问题。 为什么需要继承? 以下解决方案中有什么问题? 如何解决? 4.1 继 承 概 述 利用继承可以很好地实现代码重用问题。 在利用已有的类构造新类时,新类保留已有类的属性和行为,并可以根据要求添加新的属性和行为。 例如,卡车具有一般汽车的属性,而特有的属性就是载货。 曾经介绍过类之间的关系:“USES-A”关系、“HAS-A”关系、“IS-A”关系。其中,“IS-A”关系是继承的一个特征。 4.1.1 超类、子类 被继承的类一般称为“超类”或“父类”,继承的类称为“子类”。 当子类继承超类时,不必写出全部的实例变量和方法,只需声明该类继承了的已定义的超类的实例变量和方法即可。 继承节省了定义新类的大量工作,可以方便地重用代码。 但一个子类不必非要使用继承下来的属性和方法,一个子类可以选择覆盖已有的属性和方法,或添加新的属性和方法。 4.1.2 继承层次 继承关系可以用树形层次表达出来。 为汽车类的继承层次关系,注意,汽车类定义了品牌、价格、最高时速等属性(成员变量),以及刹车、启动等方法。当定义继承汽车类的子类卡车时,它自动继承汽车类的属性和方法。 继承只是代码重用的一种方式,滥用继承会造成很严重的后果。 只有当需要向新类添加新的操作,并且把已存在类的默认行为融合进新类中时,才需要继承已存在的类。 4.1.2 继承层次 4.2 Java中的继承 在Java中,实际上所有的类均直接或间接继承自java.lang.Object类,也可以说Object类是Java中的总根类。 实际开发中,如不特殊指定,开发人员自己定义的类均直接继承自Object类。 4.2.1 派生子类 在Java中,类的继承通过entends关键字实现。在创建新类时,使用extends指明新类的父类,具体语法如下。 class 子类名 extends 父类名 { 子类类体 } 4.2.2 继承规则 当类B成功继承类A后,就涉及到成员变量的继承问题。下面将从两个方面介绍成员变量继承的相关知识,主要包括成员变量的继承规则与成员变量的隐藏。 1.成员变量的继承规则(取决于访问权限) 2.成员变量的隐藏 对于成员变量来说,当子类本身具有与继承自父类的成员变量名称相同的成员变量时,便构成了成员变量的隐藏。其含义是,在子类中直接调用该成员变量时,将调用的是子类中本身具有的成员变量,而不是从父类继承的成员变量, 例题4-1 public类型成员变量示例1 例题4-2 public类型成员变量示例2 例题4-3 成员变量隐藏示例 读程序,看输出结果是多少? 4.2.3 方法的继承与覆盖 方法继承允许子类使用父类的方法,而覆盖是在子类中重新定义父类中的方法,更显示了继承的灵活性。 1.方法的继承 方法也是一种成员,因此继承规则与成员变量的继承规则完全一样 其是否能被继承同样取决与访问限制。 4.2.3 方法的继承与覆盖 2.方法的覆盖 子类的自身方法中,若与继承过来的方法具有相同的方法名,便构成了方法的重写(有的资料称之为方法的覆盖)。 * 子类的方法名称返回类型及参数签名 必须与父类的一致 * 子类方法不能缩小父类方法的访问权限 * 方法覆盖只存在于子类和父类之间,同一个类中只能重载 * 父类的静态方法不能被子类覆盖为非静态方法 * 父类的非静态方法不能被子类覆盖为静态方法 * 父类的私有方法不能被子类覆盖 public class Vehicle { //startUp方法表示一般交通工具的启动功能 public void startUp() { System.out.println(一般交通工具的启动方法!!!); } } public class Car extends Vehicle { public void startUp() { System.out.println(“轿车的启动方法!!!); } } public class Sample4_5 { public static void main(String[] args) { //创建对象并调用方法 Car c=new Car(); System.out.print(实际调用的方法为:); c.startUp(); } } 4.2.4 this与super 在Java中,this和super与继承是密切相关的。this常用来引用当前对象,而super常
您可能关注的文档
最近下载
- (2024秋新版)人教PEP版三年级英语上册全册教案.doc
- ISO15189质量手册--输血科通用模版(文档-100页).docx VIP
- RBA6.0版标准资料学习课件.ppt VIP
- 2025年北森领导力测试题及答案.doc VIP
- AI政务大厅业务平台架构方案.pptx VIP
- 医疗器械临床应用管理办法.pptx VIP
- 征信简版电子版PDF个人信用报告最新版2024年可编辑带水印模板.pdf VIP
- 人工智能对人类发展利大于弊VS弊大于利辩论赛正方辩词一辩、二辩、三辩、四辩发言稿.pptx VIP
- 人工智能对人类发展利大于弊VS弊大于利辩论赛 反方辩词一辩、二辩、三辩、四辩发言稿.docx VIP
- 北森在线测评题库及答案.doc VIP
文档评论(0)