第五章-集成与多态探究.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第五章 继承与多态 5.1 继承的概念 5.2 继承的实现 5.3 子类的构造方法 5.4 抽象类和最终类 5.5 接口 5.6 多态 5.7 引用类型变量实现的多态 5.8 匿名内部类 5.1 继承的概念 class Circle{ double radius=10; public double getArea(){ return Math.PI*radius*radius; } } 5.1 继承的概念(续) 5.1 继承的概念(续) 5.1 继承的概念(续) 5.2 继承的实现 5.2.1 派生子类 5.2.2 变量的隐藏 5.2.3 方法的覆盖 5.2.1 派生子类 子类的定义格式是: [修饰符] class 子类名 extends 直接超类名 { 成员变量定义 构造方法定义 静态初始化块 实例初始化块 成员方法定义 } 【例5-2】 【例5-2】 (续) 【例5-2】 (续) 小结 ⑴ 在一个类中,不可以被继承的内容有: ·私有成员。因为它们只在本类中可见,所以在类外就不能被访问,进而不能被继承。 ·静态初始化块、实例初始化块和构造方法。因为它们都不是成员,因此也不会被继承。 ·超类和子类不在同一个包内,超类中没有用protected、public修饰的成员。因为它们只在本包中可见,所以在包外就不能被访问,进而不能被继承。 小结(续) ⑶ 派生类中的成员由下列三部分构成: ·在类体中定义的成员; ·从它的直接超类继承的成员; ·从它的直接超接口继承的成员。在接口中讲述。 注意:Object类没有直接超类,所以不存在继承的问题。 5.2.2 变量的隐藏 在子类中定义了一个的成员变量,它与直接超类中的某个成员变量同名。从而使直接超类中的那个成员不能被子类直接引用,这称为成员变量的隐藏。 【例5-3】在例5-1中,在圆类和直接超类圆柱体类中增加同名变量,实现变量的隐藏。 class Circle{ private double radius=10; String name=circle; public double getRadius(){ return radius; } public void setRadius(double radius){ this.radius=radius; } public double getArea(){ return Math.PI*radius*radius; } } 【例5-3】 【例5-3】 5.2.3 方法的覆盖 在子类中定义了一个实例方法,该方法与直接超类中的某个实例方法具有相同的方法名、返回类型和完全一致的参数,从而使直接超类中的那个方法不能被子类直接引用,这称为方法覆盖。 一个正确的方法覆盖需要满足以下要求: (1) 覆盖方法与被覆盖方法的返回类型、方法名、参数要完全一致。 (2) 覆盖方法的访问级别不能低于被覆盖方法的访问级别。 (3) 覆盖方法不能比被覆盖方法抛出更多的受检查异常(checked Exception)。 【例5-4】 方法覆盖 【例5-4】 方法覆盖(续) 5.3 子类的构造方法 5.3.1 有继承时的构造方法 5.3.2 关键字null、this和super 5.3.1 有继承时的构造方法 子类不能继承父类的构造方法,但子类的构造方法与父类的构造方法存在着一定的关系,并遵守下列原则: ⑴ 如果子类没有定义任何构造方法,那么在创建子类对象时,调用父类无参构造方法(即默认的构造方法),即执行super( );。 ⑵ 如果子类定义了构造方法,并且在子类构造方法中没有显式调用父类的构造方法,那么在创建子类对象时,首先调用父类无参构造方法(即默认的构造方法),然后再执行子类自己的构造方法。 ⑶ 如果子类定义构造方法,并且在子类构造方法中利用super关键字显式调用父类的构造方法,那么在创建子类对象时,首先执行显式调用父类的构造方法,然后再执行子类构造方法体的其余部分。不再调用父类无参构造方法(即默认的构造方法)。 注意:super显式调用语句必须放在子类构造方法的第一个可执行语句。 【例5-5】有继承时,子类中构造方法 【例5-5】有继承时,子类中构造方法 【例5-5】有继承时,子类中构造方法 【例5-5】有继承时,子类中构造方法 【例5-5】有继承时,子类中构造方法 程序运行结果: create Circle obj1: Circle(double r) constructor. r=0.0 defa

文档评论(0)

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

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

1亿VIP精品文档

相关文档