- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第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常
文档评论(0)