已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章 类的封装、继承和多态l 3.1 类和对象l 3.2 类的封装性l 3.3 类的继承性l 3.4 类的多态性l 3.5 类的抽象性3.1 类和对象类(class)是既包括数据又包括作用于数据的一组操作的封装体。对象(object)是类的实例(instance)。类具有封装性、继承性、多态性和抽象性。一、面向对象的思想 面向对象(Object Oriented)指世界是由对象(Object )所组成的,每个对象主要具有两个特征:1、行为(Behaviors)2、状态( States ) 每个对象通过其行为的变化来改变自身的状态。如何理解面向对象的程序设计 所有的东西都是对象:可以把对象看成一种新型变量,它保存着数据,但可进行一些操作。 程序是一大堆对象的集合。 把问题看成是相互作用的事物的集合, 用属性来描述事物,把动作称为方法。 这样事物就可以使用属性和方法把它描述清楚。 二。类与对象1、类的概念2、对象的概念3、类与对象的关系1、类的概念 类是面向对象程序设计中的一个重要概念,它是事物(对象)的模板或蓝图。 例如你面前的这辆汽车是具体的事物,我们称它为对象(object)。它有许多的属性,例如:红色,四个轮子,四个车门五个座位等等;还有许多的方法,例如:点火,转弯等等。当你确定了这些属性和方法后,别人就可以确定这是一辆汽车。这样我们可以根据这些生成一模板。 模板定义为 名字:汽车 属性:颜色、车门、轮子、座位等 方法:点火、转弯等 这个模板,就是我们所说的类。 以后我们可以直接使用这个模板来生成一些实实在在的汽车。2、对象(Object)的概念 对象是类的实例. 前面我们把类比喻成模板,那么对象就应该是由这个模板生成的实例。 例如:我们接着前面的例子,根据模板(类),使颜色为红色、有四个车轮、四个车门、五个座位,这时就生成了我面前的这辆红色车,它是按照前面的那个模板(类)生成的,这就是实例(对象)。3、类与对象的关系 对象是通过定义类,然后实例化(也称创建对象)实现的 。三、类的声明l 声明类类声明 成员变量的声明; 成员方法的声明及实现;修饰符 class 类 extends 父类 implements 接口列表l 类的声明示例 public class MyDate class Circle extends Figure 声明成员变量和成员方法修饰符 返回值类型 方法(参数列表) throws 异常类 语句序列; return 返回值;l 成员变量和成员方法的声明示例 public class MyDate int year,month,day; /成员变量 void set(int y,int m,int d)/成员方法,设置日期 year=y; month=m; day=d; 成员方法重载 一个类中可以有多个同名的成员方法。但参数列表必须不同,即参数个数、参数类型要有所不同。 void set(int y,int m,int d) void set(int m,int d) void set(MyDate d)四、对象的声明及创建l 声明对象类 对象l 创建实例对象 = new 类的构造方法(参数列表) l 引用对象的成员变量和调用对象方法对象.成员变量对象.成员方法(参数列表)Java语言自动释放对象。 【例3.1】声明日期类及使用日期对象。 五、 对象的引用模型六. 对象的关系运算与比较3.2 类的封装性一、OOP的封装q 含义:提供将所抽象出的问题的属性(数据成员)和行为(代码成员)相组合的一种机制,它能将这二类成员再组合在一起,形成对象或实体。q 目的:增强使用的安全性,使用者不必了解具体的实现细节,而只需要通过设计者提供的外部接口来操作它。q 优点:实现高度模块化,从而产生出软件构件(控件);利用控件快速地组装程序。 客户可以调用一个并不了解内部机制的对象的方法 任何关于内部的改动对客户来说都是隐藏的q 封装的基本要求: 有一个特定的边界:所有的内部变化都限制在此边界内(类定义的 ); 有外部接口:此对象利用它与其它对象发生关联(public成员); 有特定的访问权限:在对象外部不能访问或修改受保护的内部实现细节(private成员),从而可以实现OOP中的继承与派生、多态性等。二、 构造方法l 声明及调用构造方法public class MyDate public MyDate(int y, int m, int d) /声明构造方法 /构造方法与类同名,构造方法返回该类的一个实例 year = y; month = m; day = d; MyDate d = new MyDate(2009,7,18);l 默认构造方法 public MyDate() l 拷贝构造方法public MyDate(MyDate d) year = d.year; month = d.month; day = d.day;调用语句如下: MyDate d1 = new MyDate(2009,7,16); MyDate d2 = new MyDate(d1); 第2句功能相当于以下两句:MyDate d2 = new MyDate(); d2.set(d1);l 构造方法重载public MyDate(int y, int m, int d)public MyDate()public MyDate(MyDate d)三、this引用和instanceof对象运算符l this引用u 指代对象本身 this u 访问本类的成员变量和成员方法 this. 成员变量 this. 成员方法( 参数列表) u 调用本类重载的构造方法 this( 参数列表) l instanceof 对象运算符 d instanceof MyDate 四、 访问控制 五、 静态成员public class MyDate private int year,month,day; /实例成员变量 private static int thisYear; /静态成员变量 static /静态成员变量初始化 thisYear=2009; public static int getThisYear() /静态成员方法 return thisYear; /访问静态成员变量 【例3.2】封装的日期类。六、 析构方法析构方法用于释放实例并执行特定操作。如需要在释放对象时执行特定操作,则类可以声明析构方法。一个类只能有一个析构方法。public void finalize() /析构方法 语句序列;七、浅拷贝与深拷贝 l 浅拷贝:使用一个已知实例对新创建实例的成员变量逐个赋值。在对象成员变量是基本数据类型时,浅拷贝能够复制成功。ll 深拷贝:当一个类包含引用类型的成员变量时,使用的拷贝构造方法,既要复制非引用类型的成员变量,又要为引用类型的成员变量创建新的实例,并初始化为形参实例值。 public Person(Person p) this(, new MyDate(p.birthday); 【例3.3】 使用对象作为成员变量并实现深拷贝的Person类。3.3 类的继承性继承的概念: 通过必要的说明能够实现某个类无需重新定义就拥有另一个类的某些属性和方法,并把这种关系称为继承,先定义的类成为父类,后定义的类称为子类,并且允许多层的继承关系。 Java中的类是以类的层次来存在的。Java中的类可用extends关键字来声明为另一个类的子类(subclass).子类从父类(superclass)那里继承(inherit)变量和方法,然后可像在子类中声明的一样来使用这些变量和方法.3.3.1 由继承派生类修饰符 class 类 extends 父类 implements 接口列表public class Student extends Person String speciality; /专业【例3.4】 Student类继承Person类。 3.3.2 继承原则及作用 1、继承原则u 子类继承父类所有的成员变量 包括静态成员变量和实例成员变量。u 子类继承父类除构造方法以外的成员方法 包括静态成员方法和实例成员方法及父类的析构方法。 u 子类不能继承父类的构造方法 因为父类的构造方法只能创建父类实例并初始化。子类必须声明自己需要的构造方法。u 子类可以增加成员,可以重定义从父类继承来的成员,但不能删除它们。 2、继承的作用3、Object类public class Object public Object() /构造方法 public String toString() /描述对象 public boolean equals(Object obj)/比较对象相等 protected void finalize() throws ThrowableJava中的类都是Object的子类, Object是类的根。public class Person extends Object4、子类对父类成员的访问权限u 子类不能访问父类的私有成员(private)。 u 子类能够访问父类的公有成员(public)和保护成员(protected)。u 子类对父类的缺省权限成员的访问控制,以包为界分两种情况:可以访问当前包中父类的缺省权限成员,不能访问其他包中父类的缺省成员。3.3.3 子类的构造方法l 使用super()调用父类构造方法super(参数列表)public Student(String name, MyDate birthday, String spec) super(name, birthday); /调用父类同参数的构造方法 this.speciality = spec;l 默认执行super()public Student() /Java提供的默认构造方法 super(); /调用父类构造方法Person()特殊引用:this和superl this this用来引用当前对象中的变量和方法.有些时候可以省略.l super super用来引用父类中的方法和变量,主要是被覆盖了的变量或者方法.不可省略.演示this和super的使用3.4 类的多态性 多态是指在一棵继承树中的类可以有多个同名但不同方法体以及不同形参的方法。多态的概念两种情况:l 覆盖:在子类中直接定义和父类同样的属性和方法,但重新编写了方法体,即子类与父类方法的星参与返回值都相同,而内部处理不同,这种方法在使用过程中,Java虚拟机会根据调用这个方法的类来确定哪个方法被调用。l 重载:同一个类定义中有多个同名的方法,但有不同的形参,而且每个方法有不同的方法体,调用时根据形参的个数和类型来决定调用的是哪个方法。l 注:不能根据返回值的类型来区分重载的方法3.4.1 子类重定义从父类继承来的成员l 子类隐藏父类成员变量 重定义父类的成员变量。l 子类覆盖父类成员方法 重定义父类的成员方法。 l 子类继承并重载父类成员方法 当子类重定义父类的成员方法时,两者的参数列表不同,则子类继承了父类的成员方法,并重载了继承来的成员方法。注意:子类能够继承并覆盖父类的析构方法,但不能重载析构方法。【 例3.5】 Student 类重定义从父类继承来的成员。 super引用l 调用父类的构造方法super(参数列表)l 引用父类同名成员 u 子类隐藏父类成员变量 super. 成员变量 u 子类覆盖父类成员方法 super. 成员方法( 参数列表) 3.4.2 类型的多态l 子类对象即是父类对象new Student() instanceof Person /truenew Person() instanceof Student /false l 父类对象引用子类实例Person p=new Student(); Object obj = new Person(); public int olderThen(Person p) p1.olderThen(s1)s1.olderThen(p1) 3.4.3 编译时多态和运行时多态性1、编译时多态性方法重载都是编译时多态。 Person p1 = new Person(李小明, new MyDate(1979,3,15);p1.toString() /执行Person类的toString()Student s1= new Student(p1,计算机); s1.toString() /执行Student类的toString()2、 3.4.4 多态的方法实现1、多态的toString()方法Object类声明:public String toString() /返回当前对象的信息字符串 return getClass().getName() + + Integer.toHexString(hashCode();2、多态的equals()方法Object类声明:public boolean equals(Object obj) return this = obj;【例3.6】在对象数组中查找。l 对象数组及计数ll 运行时多态性体现System.out.println(tablei.toString();属性的继承l 属性的继承:子类不需要再定义就拥有了父类已有的非私有属性l 注:继承了属性,表示子类被创建时另开辟了新的空间来存储从父类继承而来的属性,其初值应该是父类中该属性的初值,但之后,双方的相同属性就是彼此相互独立的变量了。只有当父类的该属性的定义发生了变化,子类中的该属性定义也跟着发生变化。l 属性的覆盖:子类可以重新定义父类的非私有属性,这样,子类定义了一个与父类同名的属性,并且子类也继承了父类的该属性,在使用时通过调用该属性的变量或者方法来决定使用哪一个。方法的继承l 方法的继承:子类不需要重新定义就可以拥有父类的非私有方法l 方法的覆盖:子类定义一个和父类同名而且同形参表的方法,如果子类中需要用父类的被覆盖的方法,可使用关键字super来实现l 方法的重载:方法的覆盖与重载的区别l 方法的覆盖是子类和父类之间的关系,而重载是同一类内部多个方法间的关系l 方法的覆盖一般是两个方法间的,而重载时可能有多个重载方法l 覆盖的方法有相同的方法名和形参表,而重载的方法只能有相同的方法名,不能有相同的形参表l 覆盖时区分方法的是根据调用他的对象,而重载是根据形参来决定调用的是哪个方法l 用final修饰的方法是不能被子类覆盖的,只能被重载3.5 类的抽象性l 3.5.1 用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年克拉玛依辅警协警招聘考试真题及完整答案详解1套
- 2023年金华辅警协警招聘考试备考题库含答案详解(b卷)
- 2024年佛山辅警招聘考试题库含答案详解(完整版)
- 2023年辽源辅警招聘考试题库含答案详解(综合卷)
- 2024年宿州辅警协警招聘考试备考题库及完整答案详解一套
- 2023年驻马店辅警招聘考试真题含答案详解(a卷)
- 安徽省合肥三中2026届化学高二第一学期期末复习检测模拟试题含解析
- 2023年阿克苏辅警招聘考试真题附答案详解(考试直接用)
- 四川省成都市实验中学2025-2026学年高二数学第一学期期末学业质量监测试题含解析
- 2026届河南省许昌市数学高二上期末综合测试模拟试题含解析
- 在线学习课堂《项目管理概论》单元考核测试答案
- 英语A级常用词汇
- 《自贡市医疗服务项目价格汇编(2023版)》
- MT 684-1997矿用提升容器重要承载件无损探伤方法与验收规范
- 等离子体物理课件
- 新华制药内部控制(1)ppt课件
- 水利基础知识试题集(带答案)
- 盘源性腰痛的诊治(修改)课件
- 天华管壳式阳极保护冷却器操作手册
- 2022年医疗纠纷三级预警方案.doc
- 徐汇滨江:从工业棕地到景观绿廊
评论
0/150
提交评论