《ava类与继承多态》由会员分享,可在线阅读,更多相关《ava类与继承多态(18页珍藏版)》请在金锄头文库上搜索。
1、第第 3 章章 类的封装、继承和多态类的封装、继承和多态 3.1 类和对象类和对象 3.2 类的封装性类的封装性 3.3 类的继承性类的继承性 3.4 类的多态性类的多态性 3.5 类的抽象性类的抽象性 3.1 类和对象类和对象 类(类(class)是既包括数据又包括作用于数据的一组操作的封装体。)是既包括数据又包括作用于数据的一组操作的封装体。 对象(对象(object)是类的实例()是类的实例(instance) 。 类具有封装性、继承性、多态性和抽象性。类具有封装性、继承性、多态性和抽象性。 一、面向对象的思想一、面向对象的思想面向对象(Object Oriented)指世界是由对象(O
2、bject )所组成的,每个对象主要具有 两个特征: 1、行为(Behaviors) 2、状态( States ) 每个对象通过其行为的变化来改变自身的状态。如何理解面向对象的程序设计如何理解面向对象的程序设计 所有的东西都是对象:可以把对象看成一种新型变量,它保存着数据,但可进行一些操作。 程序是一大堆对象的集合。 把问题看成是相互作用的事物的集合, 用属性来描述事物,把动作称为方法。 这样事物就可以使用属性和方法把它描述清楚。 二。类与对象 1、类的概念、类的概念 2、对象的概念、对象的概念 3、类与对象的关系、类与对象的关系1、类的概念、类的概念类是面向对象程序设计中的一个重要概念,它是
3、事物(对象)的模板或蓝图。 例如你面前的这辆汽车是具体的事物,我们称它为对象(object) 。它有许多的属性,例如: 红色,四个轮子,四个车门五个座位等等;还有许多的方法,例如:点火,转弯等等。当你确 定了这些属性和方法后,别人就可以确定这是一辆汽车。这样我们可以根据这些生成一模板。 模板定义为 名字:汽车 属性:颜色、车门、轮子、座位等 方法:点火、转弯等 这个模板,就是我们所说的类。 以后我们可以直接使用这个模板来生成一些实实在在的汽车。 2、对象(、对象(Object)的概念)的概念对象是类的实例. 前面我们把类比喻成模板,那么对象就应该是由这个模板生成的实例。例如:我们接着前面的例子
4、,根据模板(类) ,使颜色为红色、有四个车轮、四个车门、五 个座位,这时就生成了我面前的这辆红色车,它是按照前面的那个模板(类)生成的,这就是 实例(对象) 。 3、类与对象的关系、类与对象的关系对象是通过定义类,然后实例化(也称创建对象)实现的 。 三、类的声明三、类的声明 声明类声明类 类声明类声明 成员变量的声明成员变量的声明;成员方法的声明及实现成员方法的声明及实现; 修饰符修饰符 class 类类 extends 父类父类 implements 接口列表接口列表类的声明示例类的声明示例public class MyDateclass Circle extends Figure 声明成
5、员变量和成员方法声明成员变量和成员方法 修饰符修饰符 返回值类型返回值类型 方法方法(参数列表参数列表) throws 异常类异常类 语句序列语句序列;return 返回值返回值;成员变量和成员方法的声明示例成员变量和成员方法的声明示例public class MyDate int year,month,day; /成员变量成员变量void set(int y,int m,int d)/成员方法,设置日期成员方法,设置日期year=y;month=m;day=d;成员方法重载成员方法重载 一个类中可以有多个同名的成员方法。但参数列表必须不同,即参数个数、参数类型要有一个类中可以有多个同名的成员
6、方法。但参数列表必须不同,即参数个数、参数类型要有 所不同。所不同。 void set(int y,int m,int d) void set(int m,int d) void set(MyDate d) 四、对象的声明及创建四、对象的声明及创建 声明对象声明对象 类类 对象对象 创建实例创建实例 对象对象 = new 类的构造方法类的构造方法(参数列表参数列表) 引用对象的成员变量和调用对象方法引用对象的成员变量和调用对象方法 对象对象.成员变量成员变量 对象对象.成员方法成员方法(参数列表参数列表) Java 语言自动释放对象。语言自动释放对象。【例例 3.1】声明日期类及使用日期对象。
7、声明日期类及使用日期对象。 五、五、 对象的引用模型对象的引用模型六六. 对象的关系运算与比较对象的关系运算与比较3.2 类的封装性类的封装性 一、一、OOP 的封装的封装 含义: 提供将所抽象出的问题的属性(数据成员)和行为(代码成员)相组合的一种机制,它能将这 二类成员再组合在一起,形成对象或实体。 目的: 增强使用的安全性,使用者不必了解具体的实现细节,而只需要通过设计者提供的外部接口来 操作它。 优点: 实现高度模块化,从而产生出软件构件(控件) ;利用控件快速地组装程序。 客户可以调用一个并不了解内部机制的对象的方法客户可以调用一个并不了解内部机制的对象的方法 任何关于内部的改动对客
8、户来说都是隐藏的任何关于内部的改动对客户来说都是隐藏的封装的基本要求:封装的基本要求: 有一个特定的边界:所有的内部变化都限制在此边界内(类定义的有一个特定的边界:所有的内部变化都限制在此边界内(类定义的 ) ; 有外部接口:此对象利用它与其它对象发生关联(有外部接口:此对象利用它与其它对象发生关联(public 成员)成员) ; 有特定的访问权限:在对象外部不能访问或修改受保护的内部实现细节有特定的访问权限:在对象外部不能访问或修改受保护的内部实现细节 (private 成员)成员) ,从而可以实现,从而可以实现 OOP 中的继承与派生、多态性等。中的继承与派生、多态性等。二、二、 构造方法
9、构造方法 声明及调用构造方法声明及调用构造方法 public class MyDate public MyDate(int y, int m, int d) /声明构造方法声明构造方法 /构造方法与类同名,构造方法返回该类的一个实例构造方法与类同名,构造方法返回该类的一个实例year = y;month = m;day = d; MyDate d = new MyDate(2009,7,18); 默认构造方法默认构造方法 public MyDate() 拷贝构造方法拷贝构造方法 public MyDate(MyDate d) year = d.year;month = d.month;day
10、= d.day; 调用语句如下:调用语句如下: MyDate d1 = new MyDate(2009,7,16); MyDate d2 = new MyDate(d1); 第第 2 句功能相当于以下两句:句功能相当于以下两句: MyDate d2 = new MyDate(); d2.set(d1); 构造方法重载构造方法重载 public MyDate(int y, int m, int d) public MyDate() public MyDate(MyDate d) 三、三、this 引用和引用和 instanceof 对象运算符对象运算符 this 引用引用 指代对象本身指代对象本
11、身 this 访问本类的成员变量和成员方法访问本类的成员变量和成员方法 this. 成员变量成员变量 this. 成员方法成员方法( 参数列表参数列表) 调用本类重载的构造方法调用本类重载的构造方法 this( 参数列表参数列表) instanceof 对象运算符对象运算符 d instanceof MyDate 四、四、 访问控制访问控制 五、五、 静态成员静态成员 public class MyDate private int year,month,day; /实例成员变量实例成员变量private static int thisYear; /静态成员变量静态成员变量static /静态成
12、员变量初始化静态成员变量初始化thisYear=2009;public static int getThisYear() /静态成员方法静态成员方法return thisYear; /访问静态成员变量访问静态成员变量 【例例 3.2】封装的日期类封装的日期类。 六、六、 析构方法析构方法 析构方法用于释放实例并执行特定操作。析构方法用于释放实例并执行特定操作。 如需要在释放对象时执行特定操作,则类可以声明析构方法。一个类只能有一个析构方法。如需要在释放对象时执行特定操作,则类可以声明析构方法。一个类只能有一个析构方法。public void finalize() /析构方法析构方法 语句序列语
13、句序列; 七、浅拷贝与深拷贝七、浅拷贝与深拷贝 浅拷贝:使用一个已知实例对新创建实例的成员变量逐个赋值。在对象成员变量是基本数据浅拷贝:使用一个已知实例对新创建实例的成员变量逐个赋值。在对象成员变量是基本数据 类型时,浅拷贝能够复制成功。类型时,浅拷贝能够复制成功。 深拷贝:当一个类包含引用类型的成员变量时,使用的拷贝构造方法,既要复制非引用类型深拷贝:当一个类包含引用类型的成员变量时,使用的拷贝构造方法,既要复制非引用类型 的成员变量,又要为引用类型的成员变量创建新的实例,并初始化为形参实例值。的成员变量,又要为引用类型的成员变量创建新的实例,并初始化为形参实例值。public Person
14、(Person p) this(p.name, new MyDate(p.birthday); 【例例 3.3】 使用对象作为成员变量并实现深拷贝的使用对象作为成员变量并实现深拷贝的 Person 类。类。 3.3 类的继承性类的继承性继承的概念:继承的概念:通过必要的说明能够实现某个类无需重新定义就拥有另一个类的某些属性和方法, 并把这种关系称为继承,先定义的类成为父类,后定义的类称为子类,并且允许多层的继承关 系。Java 中的类是以类的层次来存在的。Java 中的类可用 extends 关键字来声明为另一 个类的子类(subclass).子类从父类(superclass)那里继承(inh
15、erit)变量和方法,然后可像在子类中 声明的一样来使用这些变量和方法.3.3.1 由继承派生类由继承派生类 修饰符修饰符 class 类类 extends 父类父类 implements 接口列表接口列表 public class Student extends Person String speciality; /专业专业 【例例 3.4】 Student 类继承类继承 Person 类。类。 3.3.2 继承原则及作用继承原则及作用 1、继承原则、继承原则 子类继承父类所有的成员变量子类继承父类所有的成员变量 包括静态成员变量和实例成员变量。包括静态成员变量和实例成员变量。 子类继承父类除构造方法以外的成员方法子类继承父类除构造方法以外的成员方法 包括静态成员方法和实例成员方法及父类的析构方法。包括静态成员方法和实例成员方法及父类的析构方法。 子类不能继承父类的构造方法子类不能继承父类的构造方法 因为父类的构造方法只能创建父类实例并初始化。子类必须声明自己需要的构造方法。因为父类的构造方法只能创