《Java程序设计教程》课件第五章:类和对象.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《Java程序设计教程》课件第五章:类和对象.pptx》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java程序设计教程 Java 程序设计 教程 课件 第五 对象
- 资源描述:
-
1、本章学习目标:了解面向对象程序设计的基本思想 掌握类和对象的声明与使用 熟练掌握方法的声明,参数的传递和方法的重载 掌握this和static关键字的使用 掌握访问控制修饰符 了解包的声明和使用 了解单例类的概念第五章第五章 类和对象类和对象第第1 1节节part面向对象思想 面向对象是以现实生活中客观存在的事物(即对象)来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以事物为中心来思考、分析问题,并根据事物的本质特征将其抽象为系统中的对象,作为系统的基本构成单位。面向对象思想本节概述 当前,在软件开发领域有两种主流的开发方法:结构化开发方法(Structure Analy
2、sis Structure Design,SASD)和面向对象(Object Oriented,OO)开发方法。结构化开发又叫面向过程开发,在1978年,由E.Yourdon和L.L.Constantine提出,也可以称为面向功能的软件开发方法或面向数据流的软件开发方法。在早期编程语言中,如BASIC、C语言、FORTRAN、Pascal等都支持机构化开发,其基本原理是将一个软件分为多个过程(函数)进行开发,用结构体(Struct)管理数据。1979年,Tom Demarco对此方法做了进一步完善。首先用结构化分析(Structure Analysis,SA)对软件进行需求分析,然后用结构化设
3、计(Structure Design,SD)方法进行总体设计,最后用结构化编程(Structure Programming,SP)完成,这种方法能够明确开发步骤。结构化设计属于自顶向下的设计,局限性在于不能灵活地适应用户不断变化的需求,制约了软件的可维护性和可扩展性,模块之间的松耦合性不高,修改或增加一个模块会影响其他模块,甚至推翻整个设计。5.1.1面向对象简介面向对象简介 为了提高效率,降低开发成本,优良的软件系统应该具备以下几个条件。1 1.可重用性可重用性 减少软件中的代码重复编程,实现一次编程,多次使用。2 2.可扩展性可扩展性 当软件必须增加新的功能时,能够在现有系统结构的基础上,
4、方便地创建新的子系统,而不需要改变系统现有的结构,也不会影响已经存在的子系统。3 3.可维护性可维护性 当用户需求发生变化时,只需要修改局部子系统的少量代码,而不需要全部改动。结构化程序设计的局限性以及人们在工作中对软件使用的迫切要求,推动了面向对象程序开发方法的迅速发展。面向对象程序设计语言,如Java、C+、C#等应运而生。面向对象出现在20世纪70年代,但由于受到当时软硬件限制,直到20世纪90年代,才成为大众所接受的主流的程序设计思想。5.1.1面向对象简介 面向对象的开发方法把软件系统看成各种对象的集合,对象就是最小的子系统,一组相关的对象能够组合成更复杂的子系统。面向对象的开发方法
5、具有以下优点。(1)把软件系统看成是各种对象的集合,接近于人类的思维方式,可以使人的思路更加明确。(2)软件的功能需求发生变动时,功能的执行者对象一般不会发生有大的变化,这使得按照对象设计出来的系统结构比较稳定。(3)对象包括属性(数据)和行为(方法),对象把数据和方法的具体实现封装在一起,提高了每个子系统的相对独立性,从而提高了软件的可维护性。(4)支持封装、继承、多态和抽象,提高了软件的可重用性、可维护性和可扩展性。在面向对象软件开发过程中,开发者的主要任务就是先建立模拟问题领域的对象模型,然后通过程序代码来实现对象模型。以下介绍面向对象开发方法中常用的基本概念。5.1.1面向对象简介 面
6、向对象的基本名称包括对象、类、消息、封装性、继承性和多态性。1 1.对象对象 面向对象开发最大的成功之处在于添加了“对象”的概念,客观世界中的任何实体都可以用对象(Object)来表示,对象是实体的抽象,由一组表示其静态特征的属性和它可执行的一组操作组成。例如,一个人是一个对象,它包含描述人的属性(如姓名、性别、出生日期、身份证号等)及其操作(如吃饭、睡觉、工作、运动等);一本图书也是一个对象,它包含描述图书的属性(如书名、作者、单价、出版社等)及其操作(销售、入库、出库等)。在面向对象开发方法中,每个对象都是具体的,也是唯一的。例如,图书一和图书二是两个不同的对象,它们虽然具有相同的属性和方
7、法,但是其属性和方法的具体内容并不相同,如图书一的书名是Java程序设计,作者是张三,单价为30元,出版社是西安电子工业出版社;而图书二的书名是C语言程序设计,作者是李四,单价为28元,出版社是清华大学出版社等。5.1.2面向对象名词面向对象名词2.2.类类 类(class)是具有相同或相似性质的具体事物抽象化,类是对象的模板,对象是类的具体化,是对应类的一个具体实例。例如,“人”是一个类,而“张三”则是人类的一个具体实例化对象。类由“特征”和“行为”两部分组成,其中“特征”是对象状态的抽象,通常使用“变量”来描述类的特征,又称为“属性”;“行为”是对象操作的抽象,通常使用“方法”来描述类的行
8、为。类和对象需要在程序中定义并操作使用,其中对象的“属性”提供数据,而“方法”则对这些数据进行相应的操作处理,使开发者与数据隔离而无需获知数据的具体格式,从而使得数据得以保护。类和对象之间的关系如图5.1所示。5.1.2面向对象名词3.3.消息消息 消息是一个实例与另一个实例之间传递的信息,是对象之间进行通信的一种规格说明。它一般由三部分组成:(1)接收消息的对象的名称;(2)消息标识符,也称消息名;(3)零个或多个参数。例如,myCircle对象是一个半径为5cm、圆心位于(100,100)的Circle类的对象,也就收Circle类的一个实例,当要求它以红色在屏幕上显示时,在Java语言中
9、应该向它发送下列消息:myCircle.show(RED);其中,myCircle是接收消息的对象的名字,show是消息名,RED是消息的参数。5.1.3消息4.4.封装封装性性 封装(Encapsulation)是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。封装使数据和加工该数据的方法封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接收哪些消息,具有哪些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。封装的目的在于把对象的设计者和对象的使用者分开,使用者不必知晓行为实现的细节,只需要设计者提供的消息来访问该对象。在
10、面向对象语言中,通过访问控制机制实现封装,来控制对象的属性和方法的可访问性,Java语言中的访问控制级别有以下四种。(1)public:公共级别,对外公开。(2)protected:受保护级别,对同一个包的类或子类公开。(3)default:默认级别,对同一个包中的类公开。(4)private:私有级别,不对外公开,只在本类内部访问。通常类的属性定义为私有,方法定义为公有,这样,访问和修改对象属性时,只能通过方法来操作,以免对象的数据遭到滥用和破坏。5.1.3消息5.5.继承性继承性 继承(Inheritance)指子类自动继承父类的属性和方法,这是类之间的一种关系。在定义和实现一个子类的时候
11、,可以在一个父类的基础之上加入若干新的内容,原来父类中所定义的内容将自动作为子类的内容。例如,“人”这个类抽象了这个群体的基础特性,而“学生”和“老师”除了具备“人”所定义的基础特性之外,各自又具有各自的特殊性。如图5.2所示为父类和子类之间的继承关系。5.1.3消息6.6.多态性多态性 多态(Polymorphism)来自于希腊语,表示“多种形态”,是指相同的操作、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,即具有不同的表现行为,这种现象称为多态性。例如,定义一个几何图形类,它具有“绘图”行为,但是这个行为没有具体含义,不确定绘制的具体图形。再定
12、义“椭圆”和“多边形”两个类,它们都继承了“几何图形”类,同时也继承了“绘图”行为,当发送绘图消息时,椭圆对象绘制椭圆,多边形对象绘制多边形,产生了不同的行为。多态的好处是应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可,大大提高程序的可复用性。5.1.3消息第第2 2节节part类和对象 Java是面向对象的程序设计语言,使用Java语言定义类以及创建对象是其面向对象的核心和本质,也是Java成为面向对象语言的基础。面向对象思想本节概述 类(class)定义了一种新的数据类型,是具有相同特征(属性)和共同行为(方法)的一组对象的集合。类的声明就是定义一个类,其语法格式如下
13、:访问符 修饰符 class 类名 属性 方法 5.2.1类 的 声 明类的声明其中:访问符用于指明类、属性或方法的访问权限,可以是public(公共的)或默认的。修饰符用于指明所定义的类的特性,可以是abstract(抽象的)、final(最终的)或默认的,这些修饰符在定义类时不是必需的,需要根据类的特性进行使用。class是Java关键字,用于定义类。类名是指所定义类的名字,类名的命名与变量名一样必须符合命名规则,Java中的类名类名通常由一个或多个有意义的单词连缀而成,每个单词的首字母大写,其他字母小写。左右两个大括号括起的部分是类体。属性是类的数据成员(也称成员变量),用于描述对象的特
14、征。方法是类的行为(也称成员方法),是对象能够进行的操作。下述代码以人类为例,实现Person类的声明。【代码5.1】Person.javapackage com;public class Person/声明类/声明属性或成员变量private String name;private int age;private String address;/声明方法或成员方法public String getName()return name;public void setName(String name)this.name=name;public int getAge()return age;5.2.
15、1类 的 声 明public void setAge(int age)this.age=age;public String getAddress()return address;public void setAddress(String address)this.address=address;public void display()System.out.println(姓名:+name+年龄:+age+地址:+address);上述代码中定义了一个名为Person的类,它有三个属性,分别是name、age和address;而且对三个属性提供了对应的getXXX()和setXXX()方法,其
16、中getXXX()方法用于获取属性的值,而setXXX()方法用于设置属性的值;另外又提供了一个display()方法用于输出属性数据信息。Person类中声明的三个属性都是私有的,只能在类体之内进行访问,而方法都是公共的,在类体之外与可以访问。Person类的类图如图5.3所示。5.2.1类 的 声 明 实际上,我们通常建议不要将任何成员变量设定为公共的,而是对其访问权限修饰符设定为私有的,对他们的访问都应当通过相应的getXXX()和setXXX()方法来进行访问,这样的优点如下:(1)如果希望属性是只读的,可以只提供getXXX()方法而不提供setXXX()方法。(2)如果希望属性是只
17、写的,可以只提供setXXX()方法而不提供getXXX()方法。(3)如果希望属性是可读可写的,则同时提供getXXX()和setXXX()方法。(4)在使用setXXX()方法设定属性值时,可以对设定的值进行合法性检查。(5)在使用getXXX()方法获取属性值时,可以对数据值进行处理和转换,然后再返回属性值。下面示例展示setXXX()方法对输入信息的验证,代码如下所示。5.2.1类 的 声 明【代码5.2】GetSetExample.javapackage com;public class GetSetExample private String password;private in
18、t age;public String getPassword()return password;public void setPassword(String password)if(password.length()!=6)System.out.println(密码位数不对,要求六位密码);return;else this.password=password;5.2.1类 的 声 明 public int getAge()return age;public void setAge(int age)if(age 120&age 0)System.out.println(“你的年龄输入有误,要求
19、0120岁);return;else this.age=age;完成类的定义后,就可以使用这种新类型来创建该类的对象。创建对象需要通过关键new为其分配内存空间,其语法格式如下:类名 对象名=new 构造方法();例如:Person person=new Person();上面一行代码使用new关键字创建了Person类的一个对象person。new关键字为对象动态分配内存空间,并返回对它的一个引用,且将该内存初始化为默认值。创建对象也可以分开写,代码如下:Person person;/声明Person类型的对象person person=new Person();/使用new关键字创建对象,
20、给对象分配内存空间5.2.2对象的创建和使用对象的创建和使用 声明对象后,如果不想给对象分配内存空间,则可以使用“null”关键字给对象赋值,例如:Person person=null;“null”关键字表示“空”,用于标识一个不确定的对象,即该对象的引用为空。因此可以将null赋给引用类型变量,但不可以赋给基本类型变量。例如:private String name=null;/是正确的 private int age=null;/是错误的 null本身虽然能代表一个不确定的对象,但null不是对象,也不是类的实例。null的另外一个用途就是释放内存,在Java中,当某一个非null的引用类型
21、变量指向的对象不再使用时,若想加快其内存回收,可让其指向null,这样该对象将不再被使用,并由JVM拉结回收机制去回收。5.2.2对象的创建和使用 创建对象之后,接下来就可以使用该对象。通过使用对象运算符“.”,对象可以实现对自己的变量访问和方法的调用。使用对象大致有以下两个作用:访问对象的属性,即对象的实例变量,格式是“对象名.属性名”。访问对象的方法,格式是“对象名.方法名()”。如果访问权限允许,类里定义的成员变量和方法都可以通过对象来调用,例如:person.display();/调用对象的方法 下述代码示例Person对象的创建和使用过程。5.2.2对象的创建和使用package c
22、om;public class PersonExample public static void main(String args)/创建p1对象Person p1=new Person();p1.display();/创建p2对象Person p2=new Person();p2.setName(张三);p2.setAge(20);p2.setAddress(重庆南泉);p2.display();5.2.2对象的创建和使用【代码5.3】PersonExample.java程序运行结果如下:姓名:null 年龄:0 地址:null姓名:张三 年龄:20 地址:重庆南泉 对象数组就是一个数组中的
23、所有元素都是对象。声明对象数组与普通基本数据类型的数组格式一样,具体格式如下:类名 数组名=new 类名 数组长度;下面语句示例了创建一个长度为5的Person类的对象数组:Person arrayPerson=new Person 5 ;上面的语句也可以分成两行,等价于;Person arrayPerson;arrayPerson=new Person 5 ;5.2.3对象数组对象数组 由于对象数组中的每个元素都是对象,所以每个元素都需要单独实例化,即还需使用new关键字实例化每个元素,代码如下所示。arrayPerson0=new Person(李四,20,重庆);arrayPerson1
24、=new Person(张三,21,成都);arrayPerson2=new Person(王五,22,西安);arrayPerson3=new Person(周一,20,北京);arrayPerson4=new Person(唐二,21,上海);5.2.3对象数组 创建对象数组时也可以同时实例化数组中的每个元素对象,此时无须指明对象数组的长度,类似基本数据类型的数组静态初始化。示例代码如下Person arrayPerson=new Person new Person(李四,20,重庆),new Person(张三,21,成都),new Person(王五,22,西安),new Person
25、(周一,20,北京),new Person(唐二,21,上海);5.2.3对象数组也可以直接简化成如下代码:Person arrayPerson=new Person(李四,20,重庆),new Person(张三,21,成都),new Person(王五,22,西安),new Person(周一,20,北京),new Person(唐二,21,上海);下述代码示例对象数组的应用。【代码5.4】ObjectArrayExample.javapackage com;public class ObjectArrayExample public static void main(String arg
展开阅读全文