- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第五章 类间的关系 类与类之间的关系 类的继承 抽象类与抽象方法 接口 5.1 类与类之间的关系 1、使用关系(最小化) 当在类A的一个方法中创建、接收或返回类B的对象 时,称类A使用类B。 2、包含关系 当类A中的一个属性是类B的对象时,称类A与类B之间 存在包含关系,也称类A包含类B。---”有一个” 。 3、继承关系 当类A是类B的特例时,称类A继承了类B。--”是一个” 子类:作为特例的类。 父类:被子类继承的类。 子类是父类的一个专门用途的版本。 5.2 类的继承 继承的好处/目的: 提高了程序的可重用性、可扩充性,充分利用现有的类进行程序开发,减轻编程者负担。(子类可以重复利用父类中的数据和方法) 能够提高程序的易维护性,降低程序维护的工作量。(公共属性都在父类) 能够更有效地组织程序结构。 类比:电视和黑白电视、彩色电视 5.2.1 继承的基本概念 继承 如果类B中拥有类A中所有域与方法,就称这两个类之间存在继承 关系,并称B类继承于A类。 父类/超类/基类(parent/super/base class) --- A类 子类(subclass) --- B类 例5-1 SimpleInheritance的源代码 注:父类指所有直接或间接被继承的类。 父类是子类公共属性的集合,子类在父类的基础上定义自己的属性。 继承是按层分类的概念。 要确定一个类是否是另一类的子类,一定要确保父类中的所有方法都可以被子类所拥有。 例 SimpleInheritance的运行结果 5.2.1 继承的基本概念 继承关系中,子类与父类之间存在“是一个”的关系。“是一个”关系是继承的一个标志。(黑白电视是一个电视,反之不成立) 子类继承父类的属性时,不能改变父类中类成员的访问权限,即继承自父类中类成员的权限在子类中仍然保持不变。 private修饰的父类成员,在子类中不能访问。 Java中支持单继承。 单继承的好处: 降低编程的复杂度、提高安全性和易维护性。 5.2.1 继承的基本概念 面向对象编程,类继承包括: 单继承---一个父类可以派生多个子类,而一个子类有 且仅有一个父类;(倒树形结构) 多继承---不仅允许一个父类可以有多个子类,一个子 类也可以有多个父类。 5.2.2 子类的创建和使用 格式: [修饰符] class 类名 extends 父类名 //类头 { 类成员声明及初始化; 类方法声明及方法体; } Java中通过在类的声明中加入extends来创建子类,如 class Kids extends Mankind{} class Worker extends Person{} 子类可以继承父类中访问权限设定为public、 protected、 默认(可继承所有非私有)的成员变量和方法,并拥有对它们直接访 问和修改的权限。但是不能直接访问权限为private的成员变量和方法。 例5-2: Kids.java 例:Kids.java 的运行结果 5.2.2 子类的创建和使用 注:类的继承具有传递性;C-B-A 在类继承传递时,类成员的访问权限保持不变; 子类继承父类中所有的公共变量和方法(非私有的); 继承时,编译子类时会自动编译相应的父类,生成.class文件。 例 5-3类SuperA 与类ClassB定义的源代码 例 5-3类SuperA 与类ClassB定义的源代码 class SuperA{ //父类的定义 public int x1=4; protected int x2=5; private int x3=6; public void add_x1(int a){ x1+=a;} public void add_x2(int a){ x2+=a;} public void add_x3(int a){ x3+=a;} public int get_x3(){ return x3; } public void set_x3(int a){ x3=a;} } class ClassB extends SuperA{ //子类的定义 public void sub_x1(int a){ x1-=a;} public void sub_x2(int a){ x2-=a;} public void sub_x3(int a){
文档评论(0)