第4章 类和对象
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
说明 抽象数据类型 实现 属性 方法 语法 语义
图4-2 抽象数据类型
4.1.2 封装
将信息隐蔽的过程称为封装。 有两方面的原因促使我们控制对成员的访问。 第一个原因是防止程序员接触他们不该接触的东西 ——通常是内部数据类型的设计思想。若只是为了解 决特定的问题,用户只需操作接口即可,毋需明白这 些信息。 第二个原因是允许库设计人员修改内部结构,不用 担心它会对客户程序员造成什么影响。
输出数据 程序设计的 对象和操作 解空间 计算机算法
2.如何用面向对象的方法实现抽象
一个抽象数据类型(Abstract Data Type,ADT) 可以分解成4个部分,如图4-2所示。语法和语义构成 抽象数据类型ADT的说明,让使用者了解这个抽象数 据类型的特征。属性和方法构成ADT的实现,展示这 个ADT是怎样做成的。
Байду номын сангаас
构造函数的特点有: (1)构造函数和类具有相同的名字。 (2)一个类可以有多个构造函数。 (3)构造函数可以有0个、1个或多个参数。 (4)构造函数没有返回值。 (5)构造函数总是和new运算符一起被调用。
4.2.4 构造函数---构造函数的作用
(1)对象初始化 (2)引入更多的灵活度(变量赋值或更复杂的操作) (3)Java中可以不定义构造函数 Java中可以不定义构造函数,此时系统会自动为 该 系统生成一个默认的构造函数。这个构造函数的名字与类 名相同,它没有任何形式参数,也不完成任何操作。 为了避免失去控制,一般将构造函数的声明与创建分开 处理。
(5)同一类所有对象都能接收相同的消息。
4.2
表示,对象是类的实例。
类
类是现实世界某些对象的共同特征 ( 属性和操作 ) 的
类的属性:就是类的静态属性的简称,指类内包
含的 各项数据,如变量或其他类的对象; 类的服务: 则被称为成员函数或方法。
4.2
类的基本定义方法如下:
[修饰符] class { 类成员变量声明 类方法声明 } 类名 [extends
1.关于类头---接口名
接口名跟在implements关键字后面,用来 说明当前类中实现了哪个接口定义的功能 和方法。接口是Java语言用来实现多重继 承的一种特殊机制,我们将在后面详细介 绍它的使用方法。
2.关于类体 类体的定义要包括类的具体内容,包括 类的属性与方法。
class <class name> { <member Field declarations> <member Method declarations> }
1.关于类头---class
class关键字,在它的后面,应跟 随新数据类型的名称。(注意不要把 class写成Class)。 父类名跟在extends 关键字后面, 用来说明当前类是哪个已经存在类的 子类,存在继承关系。继承是类与类 之间的一种非常重要的关系。
1.关于类头---类的修饰符
“public”(公共) ——意味着后续的定义任
第4章 类和对象
4.1.面向对象的基本概念 4.2 类 4.3 方法 4.4 访问控制符 4.5 静态修饰符、静态字段和方法 4.6 抽象类与抽象方法 4.7 最终类、最终属性、最终方法与终结器 本章小结 思考与练习
4.1.面向对象的基本概念
学习要点之二
•OOD方法提供了抽象数据类型机制,遵循 软件设计的三条重要原则,即抽象、信息隐 藏和模块化;
4.2.4 构造函数---创建自己的构造函数
构造函数的名字和类的名字是相同的。当构造 Employee 类的对象时,此构造函数被启动,实例字段赋初值,在 Java中,定义和初始化是统一的——两者缺一不可。 例如,用下面的代码创建Employee类的一个实例时,
new Employee (“James Bond”,100000,1950,1,1);
类的方法,又称 为成员函数,用 来规定类属性上 的操作,实现类 的内部功能的机 制,同时也是类 与外界进行交互 的重要窗口。
局部变量声明;
语句序列; }
2.关于类体---类的方法
Java语言中定义的方法有两类: 一类是需要程序书写专门的调用命令来调用的方法, 称为程序调用方法,例如isPfime (); 另一类是运行过程中系统自动调用的方法,称为系统方 法,例如我们前面程序中的action()、paint()、init()等。这 两类方法的定义和使用原则有很大差异。
【例4.1】显示三个员工的相关信息
4.2.3 创建类及类的实例对象
在程序中我们构造了一个 Employee 数组,并给它赋给三个 Employee 对 象。关于数组我们将在下一章讲述。 staff[0] = new Employee("张三", 75000,1987, 12, 15); staff[1] = new Employee("李四", 50000,1989, 10, 1); staff[2] = new Employee("王五", 40000,1990, 3, 15);
类
父类] [implements 接口名]
类的修饰符用来说明类 的特殊性质。 分为三种: 访问控制符:public 公共类 抽象类说明符:abstract 最终类说明符:f inal
接口名跟在implements关键 字后面,用来说明当前类中实 现了哪个接口定义的功能和方 法。 接口是Java语言用来实现多 重继承的一种特殊机制,我们
4.3.1 方法概述
Java程序的基本结构如下:
引入Java类库; 定义用户类1 { 定义类1的若干变量或对象: 定义类1的方法1; 定义类1的方法2; … 定义类1的方法M1; } 定义用户类2 { 定义类2的若干变量或对象: 定义类2的方法1; 定义类2的方法2; … 定义类2的方法M2 } }
4.2.3 创建类及类的实例对象
对象是类的一个实例,类是同种对象的抽象, 是创建对象的模板。在程序中创建—个对象将在内 存中开辟一块空间,其中包括该对象的属性和方法。 我们将分步讲述这个类的实现细节。创建对象使 用 关 键 字 运 算 符 new, 例 如 下 面 的 语 句 将 创 建 Employee的对象:
数据 信息
封 装
+
双重
处理
模块化
对数据的操作
4.1.面向对象的基本概念
4.1.1 抽象 1.什么是抽象 抽象就是抽出事物的本质特性 而暂时不考虑它们的细节。过程抽象和数据抽象 是常用的两种主要抽象手段。
问题空间 客观世界的 对象和操作 客观世界的算法 客观世界的 对象 结果
数据
程序员对问题的表达(抽象)
4.2.4 构造函数---构造函数的一般概念
要使用对象,首先必须构造它们,并指定它们的初始状态, 然后将方法应用于对象。 在Java程序设计语言中,使用构造函数(constructor)来构 造新的实例。一个构造函数是一个新的方法,它的作用是构造 并初始化对象。 构造函数是类的一种特殊方法,它的特殊性主要体现在如下的 几个方面: (1)构造函数的方法名与类名相同。 (2)构造函数没有返回类型。 (3)构造函数的主要作用是完成对类对象的初始化工作。 (4)构造函数不能由编程人员显式地直接调用。 (5)在创建一个类的新对象的同时,系统会自动调用该类的 构造函数为新对象初始化。
下面是一个简单化的Employee类,在编写今后的职工工资 系统时,会用到它。
class Employee { //构造函数 public Employee(String n,double s,int year,int month,int day) { name = n; //职工姓名 salary = s; //职工工资 hireDay=new GregorianCalendar(year,month-1,day);//出勤数 } //方法1 public String getName() { return name; } //更多的方法 …… //属性的实例 private String name; private double salary; private Date hireDay; }
注意:系统调用方法的最大特点: 不需要在程序里书写专门的调用 方法的命令
4.2.2 用户程序自定义类
Java程序员把注意力放在创建称为类的用户 自定义类型(user-defined type)上,类也称 为程序员定义的类型(programmer-defined type),每个类都含有数据和一组操作数据的 方法,类中的数据部分称为实例变量。用户定 义类型(即类)的实例称为对象。
创建对象以某个类为模板,这个类里定义了哪 些属性和方法,新建的对象就必然在内存里拥有 相应的属性和方法。 可见,相对于简单数据类型,类就是用户自己 定义的复杂的抽象数据类型:而相对于简单变量 ,对象就是复杂的既包括数据又包括方法代码的 复杂数据单位。
4.2.4 构造函数 1.构造函数的一般概念 2.创建自己的构造函数 3.构造函数的作用
所有东西都是对象。可将对象想象成一种新型变 量;它保存着数据,但可要求它对自身进行操作。 程序是一大堆对象的组合;通过消息传递,各对 象知道自己该做些什么。 每个对象都有自己的存储空间,可容纳其他对象。
每个对象都有一种类型。根据语法,每个对象都 是某个“类”的一个“实例”。其中,“类”(Class) 是“类型”(Type)的同义词。一个类最重要的特征就 是“能将什么消息发给它?”
4.3 方法
4.3.1 方法概述
Java 程序是由一个个类定义组成的,类有两个部分: 属性和方法。属性描述类是什么,方法描述类做什么。任 何对象都有独立的内存存储它的属性。类的所有的对象共 享存贮在内存的方法。 换言之:方法是类的主要组成部分。在一个类中,程 序的作用体现在方法中。 方法即是JAVA创建一个有名字的子程序。一个主方法 和若干个子方法构成。主方法调用其他方法,其他方法间 也可互相调用,同一个方法可被一个或多个方法调用任意 次。
4.1.3 对象
可将对象想象对象(object)应是 实际问题域中有意义的个体或概念实体。 此外,对象应该具有记忆自身状态的能 力。同时对象应该以某种方式与系统发 生关联,既对象应该与系统中其他有意 义的对象进行消息传递,并提供外部服 务。
4.1.3 对象
(1) (2) (3) (4)
何人均可使用。 “private”(私有)——意味着除您自己、类 型的创建者以及那个类型的内部函数成员,其 他任何人都不能访问后续的定义信息。 “protected”(受保护的)——与“private”相 似,只是一个继承的类可访问受保护的成员, 但不能访问私有成员。 “friendly”(友好的)——若某样东西是“友 好的”,意味着它只能在这个包装的范围内使 用(所以这一访问级别有时也叫作“包装访 问”)。“
第4章 类和对象
学习导读 本章着重介绍Java编程中类和对象等非常重要的 概念。 Java 程序是由一个个类定义组成的,编写 Java 程序的过程就是从现实世界中抽象出 Java 可实现的 类并用合适的语句定义它们的过程,这个定义过程 包括对类内各种属性和方法的定义,创建类的对象, 也包括类间的各种关系和接口的定义。 方法是类的主要组成部分。在一个类中,程序 的作用体现在方法中。方法是 Java 语言的基本构件。 利用方法可以组成结构良好的程序。本章介绍方法 的构成规则和设计、使用方法的基本要点。 Java的应用程序接口(API)大量的软件包库。
2.关于类体---类的属性
Java中声明类属性为简单变量的语法如下:
[修饰符] 变量类型 变量名 [=变量初值];
变量类型和变量名是声明一个变量必 不可少的部分;变量的类型是简单数据类 型,如int、double等。
2.关于类体---类的方法
类中定义的方法通常起到两种作用:一是围绕着类的 属性进行各种操作;二是与其他的类或对象进行数据交流、 消息传递等操作。 Java中声明方法的语法如下: [修饰符] 返回值类型 方法名(参数 列表) throws 例外名1,例外名2,… { 方法体:
图4-2 抽象数据类型
4.1.2 封装
将信息隐蔽的过程称为封装。 有两方面的原因促使我们控制对成员的访问。 第一个原因是防止程序员接触他们不该接触的东西 ——通常是内部数据类型的设计思想。若只是为了解 决特定的问题,用户只需操作接口即可,毋需明白这 些信息。 第二个原因是允许库设计人员修改内部结构,不用 担心它会对客户程序员造成什么影响。
输出数据 程序设计的 对象和操作 解空间 计算机算法
2.如何用面向对象的方法实现抽象
一个抽象数据类型(Abstract Data Type,ADT) 可以分解成4个部分,如图4-2所示。语法和语义构成 抽象数据类型ADT的说明,让使用者了解这个抽象数 据类型的特征。属性和方法构成ADT的实现,展示这 个ADT是怎样做成的。
Байду номын сангаас
构造函数的特点有: (1)构造函数和类具有相同的名字。 (2)一个类可以有多个构造函数。 (3)构造函数可以有0个、1个或多个参数。 (4)构造函数没有返回值。 (5)构造函数总是和new运算符一起被调用。
4.2.4 构造函数---构造函数的作用
(1)对象初始化 (2)引入更多的灵活度(变量赋值或更复杂的操作) (3)Java中可以不定义构造函数 Java中可以不定义构造函数,此时系统会自动为 该 系统生成一个默认的构造函数。这个构造函数的名字与类 名相同,它没有任何形式参数,也不完成任何操作。 为了避免失去控制,一般将构造函数的声明与创建分开 处理。
(5)同一类所有对象都能接收相同的消息。
4.2
表示,对象是类的实例。
类
类是现实世界某些对象的共同特征 ( 属性和操作 ) 的
类的属性:就是类的静态属性的简称,指类内包
含的 各项数据,如变量或其他类的对象; 类的服务: 则被称为成员函数或方法。
4.2
类的基本定义方法如下:
[修饰符] class { 类成员变量声明 类方法声明 } 类名 [extends
1.关于类头---接口名
接口名跟在implements关键字后面,用来 说明当前类中实现了哪个接口定义的功能 和方法。接口是Java语言用来实现多重继 承的一种特殊机制,我们将在后面详细介 绍它的使用方法。
2.关于类体 类体的定义要包括类的具体内容,包括 类的属性与方法。
class <class name> { <member Field declarations> <member Method declarations> }
1.关于类头---class
class关键字,在它的后面,应跟 随新数据类型的名称。(注意不要把 class写成Class)。 父类名跟在extends 关键字后面, 用来说明当前类是哪个已经存在类的 子类,存在继承关系。继承是类与类 之间的一种非常重要的关系。
1.关于类头---类的修饰符
“public”(公共) ——意味着后续的定义任
第4章 类和对象
4.1.面向对象的基本概念 4.2 类 4.3 方法 4.4 访问控制符 4.5 静态修饰符、静态字段和方法 4.6 抽象类与抽象方法 4.7 最终类、最终属性、最终方法与终结器 本章小结 思考与练习
4.1.面向对象的基本概念
学习要点之二
•OOD方法提供了抽象数据类型机制,遵循 软件设计的三条重要原则,即抽象、信息隐 藏和模块化;
4.2.4 构造函数---创建自己的构造函数
构造函数的名字和类的名字是相同的。当构造 Employee 类的对象时,此构造函数被启动,实例字段赋初值,在 Java中,定义和初始化是统一的——两者缺一不可。 例如,用下面的代码创建Employee类的一个实例时,
new Employee (“James Bond”,100000,1950,1,1);
类的方法,又称 为成员函数,用 来规定类属性上 的操作,实现类 的内部功能的机 制,同时也是类 与外界进行交互 的重要窗口。
局部变量声明;
语句序列; }
2.关于类体---类的方法
Java语言中定义的方法有两类: 一类是需要程序书写专门的调用命令来调用的方法, 称为程序调用方法,例如isPfime (); 另一类是运行过程中系统自动调用的方法,称为系统方 法,例如我们前面程序中的action()、paint()、init()等。这 两类方法的定义和使用原则有很大差异。
【例4.1】显示三个员工的相关信息
4.2.3 创建类及类的实例对象
在程序中我们构造了一个 Employee 数组,并给它赋给三个 Employee 对 象。关于数组我们将在下一章讲述。 staff[0] = new Employee("张三", 75000,1987, 12, 15); staff[1] = new Employee("李四", 50000,1989, 10, 1); staff[2] = new Employee("王五", 40000,1990, 3, 15);
类
父类] [implements 接口名]
类的修饰符用来说明类 的特殊性质。 分为三种: 访问控制符:public 公共类 抽象类说明符:abstract 最终类说明符:f inal
接口名跟在implements关键 字后面,用来说明当前类中实 现了哪个接口定义的功能和方 法。 接口是Java语言用来实现多 重继承的一种特殊机制,我们
4.3.1 方法概述
Java程序的基本结构如下:
引入Java类库; 定义用户类1 { 定义类1的若干变量或对象: 定义类1的方法1; 定义类1的方法2; … 定义类1的方法M1; } 定义用户类2 { 定义类2的若干变量或对象: 定义类2的方法1; 定义类2的方法2; … 定义类2的方法M2 } }
4.2.3 创建类及类的实例对象
对象是类的一个实例,类是同种对象的抽象, 是创建对象的模板。在程序中创建—个对象将在内 存中开辟一块空间,其中包括该对象的属性和方法。 我们将分步讲述这个类的实现细节。创建对象使 用 关 键 字 运 算 符 new, 例 如 下 面 的 语 句 将 创 建 Employee的对象:
数据 信息
封 装
+
双重
处理
模块化
对数据的操作
4.1.面向对象的基本概念
4.1.1 抽象 1.什么是抽象 抽象就是抽出事物的本质特性 而暂时不考虑它们的细节。过程抽象和数据抽象 是常用的两种主要抽象手段。
问题空间 客观世界的 对象和操作 客观世界的算法 客观世界的 对象 结果
数据
程序员对问题的表达(抽象)
4.2.4 构造函数---构造函数的一般概念
要使用对象,首先必须构造它们,并指定它们的初始状态, 然后将方法应用于对象。 在Java程序设计语言中,使用构造函数(constructor)来构 造新的实例。一个构造函数是一个新的方法,它的作用是构造 并初始化对象。 构造函数是类的一种特殊方法,它的特殊性主要体现在如下的 几个方面: (1)构造函数的方法名与类名相同。 (2)构造函数没有返回类型。 (3)构造函数的主要作用是完成对类对象的初始化工作。 (4)构造函数不能由编程人员显式地直接调用。 (5)在创建一个类的新对象的同时,系统会自动调用该类的 构造函数为新对象初始化。
下面是一个简单化的Employee类,在编写今后的职工工资 系统时,会用到它。
class Employee { //构造函数 public Employee(String n,double s,int year,int month,int day) { name = n; //职工姓名 salary = s; //职工工资 hireDay=new GregorianCalendar(year,month-1,day);//出勤数 } //方法1 public String getName() { return name; } //更多的方法 …… //属性的实例 private String name; private double salary; private Date hireDay; }
注意:系统调用方法的最大特点: 不需要在程序里书写专门的调用 方法的命令
4.2.2 用户程序自定义类
Java程序员把注意力放在创建称为类的用户 自定义类型(user-defined type)上,类也称 为程序员定义的类型(programmer-defined type),每个类都含有数据和一组操作数据的 方法,类中的数据部分称为实例变量。用户定 义类型(即类)的实例称为对象。
创建对象以某个类为模板,这个类里定义了哪 些属性和方法,新建的对象就必然在内存里拥有 相应的属性和方法。 可见,相对于简单数据类型,类就是用户自己 定义的复杂的抽象数据类型:而相对于简单变量 ,对象就是复杂的既包括数据又包括方法代码的 复杂数据单位。
4.2.4 构造函数 1.构造函数的一般概念 2.创建自己的构造函数 3.构造函数的作用
所有东西都是对象。可将对象想象成一种新型变 量;它保存着数据,但可要求它对自身进行操作。 程序是一大堆对象的组合;通过消息传递,各对 象知道自己该做些什么。 每个对象都有自己的存储空间,可容纳其他对象。
每个对象都有一种类型。根据语法,每个对象都 是某个“类”的一个“实例”。其中,“类”(Class) 是“类型”(Type)的同义词。一个类最重要的特征就 是“能将什么消息发给它?”
4.3 方法
4.3.1 方法概述
Java 程序是由一个个类定义组成的,类有两个部分: 属性和方法。属性描述类是什么,方法描述类做什么。任 何对象都有独立的内存存储它的属性。类的所有的对象共 享存贮在内存的方法。 换言之:方法是类的主要组成部分。在一个类中,程 序的作用体现在方法中。 方法即是JAVA创建一个有名字的子程序。一个主方法 和若干个子方法构成。主方法调用其他方法,其他方法间 也可互相调用,同一个方法可被一个或多个方法调用任意 次。
4.1.3 对象
可将对象想象对象(object)应是 实际问题域中有意义的个体或概念实体。 此外,对象应该具有记忆自身状态的能 力。同时对象应该以某种方式与系统发 生关联,既对象应该与系统中其他有意 义的对象进行消息传递,并提供外部服 务。
4.1.3 对象
(1) (2) (3) (4)
何人均可使用。 “private”(私有)——意味着除您自己、类 型的创建者以及那个类型的内部函数成员,其 他任何人都不能访问后续的定义信息。 “protected”(受保护的)——与“private”相 似,只是一个继承的类可访问受保护的成员, 但不能访问私有成员。 “friendly”(友好的)——若某样东西是“友 好的”,意味着它只能在这个包装的范围内使 用(所以这一访问级别有时也叫作“包装访 问”)。“
第4章 类和对象
学习导读 本章着重介绍Java编程中类和对象等非常重要的 概念。 Java 程序是由一个个类定义组成的,编写 Java 程序的过程就是从现实世界中抽象出 Java 可实现的 类并用合适的语句定义它们的过程,这个定义过程 包括对类内各种属性和方法的定义,创建类的对象, 也包括类间的各种关系和接口的定义。 方法是类的主要组成部分。在一个类中,程序 的作用体现在方法中。方法是 Java 语言的基本构件。 利用方法可以组成结构良好的程序。本章介绍方法 的构成规则和设计、使用方法的基本要点。 Java的应用程序接口(API)大量的软件包库。
2.关于类体---类的属性
Java中声明类属性为简单变量的语法如下:
[修饰符] 变量类型 变量名 [=变量初值];
变量类型和变量名是声明一个变量必 不可少的部分;变量的类型是简单数据类 型,如int、double等。
2.关于类体---类的方法
类中定义的方法通常起到两种作用:一是围绕着类的 属性进行各种操作;二是与其他的类或对象进行数据交流、 消息传递等操作。 Java中声明方法的语法如下: [修饰符] 返回值类型 方法名(参数 列表) throws 例外名1,例外名2,… { 方法体: