Java初学简单课件第3章类的封装、继承和多态.ppt
《Java初学简单课件第3章类的封装、继承和多态.ppt》由会员分享,可在线阅读,更多相关《Java初学简单课件第3章类的封装、继承和多态.ppt(101页珍藏版)》请在三一办公上搜索。
1、基本概念,面向过程的程序设计思想:在解决问题的时候,从问题的每个细节入手来展开系统流程,比较适用于解决简单的问题。“面向过程”是一种以事件为中心的编程思想。它并不关心整体,而是关心整体中的每个细节。,面向对象的程序设计(Object Oriental Programming,OOP)思想:最近十年发展起来的程序设计模式,其目标是将软件系统待处理问题或者事务抽象为对象(Object),由于对象本身具有一定的特征和行为,因此可以通过对象间的消息传递的方式驱动对象的动作,进而实现软件系统的功能。,基本概念,类是数据和对数据操作的封装体。类具有封装性、继承性、多态性和抽象性;这些特性提供软件复用机制,
2、增强软件的扩充能力,提高软件的可维护性。,Java的面向对象机制从C+发展而来:完善了C+类的封装、继承、多态和抽象等基本概念;放弃了C+的多重继承、友元类和运算符重载等易产生歧义且安全性差的诸多特性;采用单重继承+接口的方式实现多重继承功能,提供内存自动管理和异常处理机制。,第3章 类的封装、继承和多态,3.1 类和对象3.2 类的封装性3.3 类的继承性3.4 类的多态性3.5 类的抽象性,面向对象程序设计思想:将数据域和对数据的操作合 起来作为一个整体进行设计。对象具有属性和行为能力的实体。对象参与软件运行,多种对象合作完成预定任务。类一组对象的数据类型,是创建对象的模板。,3.1 类和
3、对象,面向对象程序设计,就是把现实对象及其关系抽象 为问题域的类及其关系,用程序设计语言设计类,再创建对象实现指定功能。,3.1 类和对象,3.1.1 类3.1.2 对象,1.声明类 2.声明成员变量和成员方法 3.成员方法重载,3.1.1 类,类(class),类是数据以及对数据的一组操作的封装体。,成员变量类中的数据,反映类的状态和特征;成员方法类中对数据的操作,表示类的行为能力。,类的成员类中的成员变量和成员方法的统称。,注意:与数据类型相似,类是只定义数据及对数据操作的模板,类本身并不真正参与程序运行,实际参与程序运行的是类 的对象。,3.1.1 类,3.1.1 类,类声明的格式:,类
4、声明 成员变量的声明;成员方法的声明及实现;,类声明定义该类的名称、访问权限、与其他类的关系等。,成员方法用来描述对成员变量进行的操作,不但要声明方 法,还要实现方法。,1.声明类,必须项关键字class和自定义的类名;可选项方括号中的;,、合法的Java标识符类名标识符Java预定通常首字母大写。,说明类属性的关键字,如public访问权限、abstract 抽象类、final最终类等。,3.1.1 类,修饰符 class 类 extends 父类implements 接口列表,类的参数,带参数的类称为泛型类。,2.声明成员变量和成员方法,3.1.1 类,修饰符 数据类型 变量=表达式,变量
5、=表达式;,成员变量声明格式:,一些说明成员属性的关键字,包括访问权限public、protected、private以及静态成员static、最终方法和 最终变量final等。,3.1.1 类,成员方法用来描述对成员变量进行的操作。格式如下:,修饰符 返回值类型 方法(参数列表)throws 异常类 语句序列;return 返回值;,2.声明成员变量和成员方法,一些说明成员属性的关键字,包括访问权限public、protected、private以及静态成员static、最终方法和 最终变量final等。,例如:public class MyDate/类声明 int year,month,d
6、ay;/声明成员变量 void set(int y,int m,int d)/成员方法,设置日期值/无返回值,有3个参数 year=y;month=m;day=d;,3.1.1 类,3.成员方法重载,一个类中成员变量不能同名,但成员变量与成员方法可以同名。,3.1.1 类,重载:一个类中可以有多个同名的成员方法,前提是参数列表必须 不同,称为类的成员方法重载。重载的作用:重载多个方法为一种功能提供多种实现;重载方法的区别:必须以不同的参数类型、参数个数、参数的次序 来区别。,3.1.1 类,例如:void set(int y,int m,int d)void set(int m,int d)/
7、重载方法,参数个数不同 void set(int d)void set(MyDate d)/重载方法,参数的数据类型不同,重载的执行:编译时,根据方法实际参数的数据类型、个数和次 序,决定究竟应该执行重载方法中的哪一个。,注意:如果两个方法的参数列表相同但返回值类型不同,则不是 重载,将产生编译错误。,3.1 类和对象,3.1.1 类3.1.2 对象,类是用于定义数据及对数据操作的构造数据类型,类本身不能参与程序运行,实际参与程序运行的是类的对象。,对象(object),对象(object)是类的实例(instance),即类的取值。类的一个对象能够获得并保存类的一个实例。,类比:类对象类的实
8、例 数据类型变量取值例如:int类型变量i取值10,对象是动态的,每个对象都有自己的生存周期,都会经历 一个从创建、运行到消亡的变化过程。任何一个对象都有其所属的类。使用对象首先需要声明对象 所属的类,再使对象获得一个类的实例,引用对象的成员变 量和调用对象的方法,使用完后释放对象。,3.1.2 对象,3.1.2 对象,1.声明对象,类 对象,2.创建实例,对象=new 类的构造方法(参数列表),例如:MyDate d;/声明d是MyDate类的一个对象,例如:d=new MyDate();/创建类MyDate的一个实例赋值给对象d MyDate d=new MyDate();/声明对象,创建
9、实例并赋值,说明:声明对象仅仅说明了对象所属的类,必须通过赋值才能 使对象获得实例。,3.引用对象的成员变量和调用成员方法,对象.成员变量对象.成员方法(参数列表),例如:d.year=2008;/引用成员变量 d.set(2009,7,28);/调用成员方法,3.1.2 对象,注意:Java的内存自动管理机制,能够跟踪存储单元的使用情况,自动收回不再被使用的资源,所以,程序中不需要释放对象 占用的空间资源。,3.1.2 对象,【例3.1】声明日期类及使用日期对象。,声明MyDate类,演示类的声明格式、创建对象、引用对象 成员变量、调用对象成员方法等。,4.对象的引用模型,3.1.2 对象,
10、Java的类是引用数据类型,两个对象之间的赋值是引用赋值,对象赋值过程中没有创建新的实例。,图3.1 对象的引用模型,3.1.2 对象,4.对象的引用模型,图3.1 对象的引用模型,3.1.2 对象,5.对象的关系运算与比较相等,图3.2 对象比较引用与比较实例值是否相等,使用关系运算符=、!=可比较两个对象是否引用同一个实例。其它关系运算符、=不能用于比较对象,Java不支持 C+的运算符重载功能。,3.1.2 对象,5.对象的关系运算与比较相等,图3.2 对象比较引用与比较实例值是否相等,一般情况下,两个对象相等是指它们引用的两个实例的各成员变量值分别对应相等。Java约定一个类的equa
11、ls()方法用于比较该类的两个对象是否相 等。,3.2 类的封装性,类的封装性(encapsulation)的含义:1.将数据和对数据的操作组合起来构成类,对象是一个不可分割的独立单位;2.实现信息隐藏,类既要提供与外部联系的方法,又要尽可能地隐藏实现细节。,类的使用者需要知道“做什么”,包括有哪些类、每个类的特点、每个类提供了哪些常量、成员变量和成员方法等,而不需要知道方法实现的细节。类的设计者需要知道“怎样做”,要考虑类怎样定义、类中有哪 些数据和方法、它们的访问控制权限、方法如何实现等问题。,3.2 类的封装性,3.2.1 构造方法3.2.2 this引用和instanceof 对象运算
12、符3.2.3 访问控制3.2.4 静态成员3.2.5 析构方法3.2.6 浅拷贝与深拷贝,3.2.1 构造方法,类的构造方法(constructor)用于创建类的一个实例并对实例的成员变量进行初始化。,1.声明及调用构造方法,构造方法与类中成员方法的不同之处:构造方法与类同名;构造方法通过new运算符调用。,一个类可以声明多个构造方法对成员变量进行不同需求的初始化;构造方法不需要写返回值类型,因为它返回的就是该类的一个实例。,构造方法和成员方法的不同之处,A.作用不同:成员方法实现对类中成员变量的操作;构造方 法用于创建类的实例并对实例的成员变量进行 初始化。B.调用方式不同:成员方法通过对象
13、调用;构造方法通过 new运算符调用。,3.2.1 构造方法,例如:public class MyDate public MyDate(int y,int m,int d)/声明构造方法,初始化成员变量 year=y;month=m;day=d;,使用new运算符调用自定义的构造方法,参数必须符合构造方法的声明。例如:MyDate d=new MyDate(2009,7,18);/创建实例并初始化成员变量,3.2.1 构造方法,2.默认构造方法,A.当一个类没有声明构造方法时,Java自动为该类提供一个无参 数的默认构造方法,对各成员变量按其数据类型进行初始化。整数、浮点数、字符、布尔和引用数
14、据类型的初值分别为 0、0.0、u0000、false和null。B.当一个类声明了构造方法,Java不再提供默认构造方法。C.一个类需要声明默认构造方法为成员赋默认值。,3.2.1 构造方法,例如:public MyDate()/默认构造方法 year=1970;month=1;day=1;,3.2.1 构造方法,3.拷贝构造方法,一个类的构造方法,如果其参数是该类对象,称为拷贝构造方法,它将创建的新对象初始化为形式参数的实例值,实现对象复制功能。Java不提供默认拷贝构造方法。,例如:public MyDate(MyDate d)/拷贝构造方法,创建新实例,值同参数实例 year=d.ye
15、ar;month=d.month;day=d.day;,调用语句如下:MyDate d1=new MyDate(2009,7,16);MyDate d2=new MyDate(d1);/调用拷贝构造方法复制实例,MyDate d2=new MyDate();/创建实例,默认日期值为(1970,1,1)d2.set(d1);/以d1对象引用的实例值设置d2引用的实例,3.2.1 构造方法,4.构造方法重载,Java支持构造方法重载,重载的构造方法提供创建实例时的多种初始化方案,如指定若干参数的构造方法、默认构造方法、拷贝构造方法等。由于Java不支持会产生歧义的参数默认值,这些构造方法必须重载,
16、参数列表必须不同。,3.2 类的封装性,3.2.1 构造方法3.2.2 this引用和instanceof 对象运算符3.2.3 访问控制3.2.4 静态成员3.2.5 析构方法3.2.6 浅拷贝与深拷贝,3.2.2 this引用和instanceof 对象运算符,1.this引用,Java类中的每个成员方法都可以使用代词this引用调用该方法的当前对象自己。,(1)指代对象本身,this用于指代调用成员方法的当前对象自身。,this,(2)访问本类的成员变量和成员方法,通过this引用当前对象的成员变量,调用当前对象的成员方法。,this.成员变量this.成员方法(参数列表),3.2.2
17、this引用和instanceof 对象运算符,1.this引用,例如:public boolean equals(MyDate d)/比较当前日期值与d是否相等/this指代调用当前方法的对象 return this=d|d!=null,一个成员方法中,若没有与成员变量同名的局部变量或形式参数,则this引用可以省略。当局部变量或形式参数与成员变量同名时,方法体中默认的是局部变量或形式参数,而要访问成员变量必须使用this引用。,3.2.2 this引用和instanceof 对象运算符,(3)调用本类重载的构造方法,1.this引用,this引用还可用在重载的构造方法中,调用本类已定义的构
18、造方法。,this(参数列表),3.2.2 this引用和instanceof 对象运算符,public MyDate(int year,int month,int day)/指定参数的构造方法,参数与成员变量同名 this.year=year;/this.year指当前对象的成员变量,year指参数 this.month=month;/this引用不能省略 this.day=day;,public MyDate()/默认构造方法,重载 this(1970,1,1);/调用本类已定义的构造方法,public MyDate(MyDate d)/拷贝构造方法 this(d.year,d.month
19、,d.day);,3.2.2 this引用和instanceof 对象运算符,2.instanceof 对象运算符,对象运算符instanceof 判断一个对象是否属于指定类及其子类,返回boolean类型。,MyDate d=new MyDate();d instanceof MyDate/返回true,d是MyDate类的实例,3.2 类的封装性,3.2.1 构造方法3.2.2 this引用和instanceof 对象运算符3.2.3 访问控制3.2.4 静态成员3.2.5 析构方法3.2.6 浅拷贝与深拷贝,3.2.3 访问控制,在C/C+语言中,一个全局变量能被当前文件中的任何函数所修
20、改,产生函数副作用,导致程序运行的不确定性。全局变量是导致软件维护困难的一个重要因素。Java不支持类之外的全局变量。同样,一个对象的成员变量和成员方法,如果没有限制,能被其他任何类访问,那么软件维护也将异常困难。,Java为类及其成员提供公有、保护、缺省和私有等多级访问控制权限,用于声明该类或成员能被其他哪些类访问的范围,实现信息分级隐藏技术。,一个源程序文件中可以声明多个类,但用public修饰的类只能有一个,且该类名必须与文件名相同。,声明一个类可使用的权限修饰符只有两种:public 和 缺省,3.2.3 访问控制,1.类的访问控制权限,公有权限public,可被所有类访问;缺省权限无
21、修饰符,可被当前包(当前文件夹)中的类访问。,源程序文件MyDate.java中可声明多个类如下:public class MyDate/公有权限的类 class MyDate_ex/缺省权限的类,2.类中成员的访问控制权限,类的成员有4种访问控制权限:,public声明公有成员,该成员可被所有类访问。,protected声明保护成员,该成员能被当前类及其子类、或 当前包中的其他类访问,也称在子类中可见。,3.2.3 访问控制,private声明私有成员,该成员仅能被当前类的成员访问。,缺省 没有修饰符表示缺省权限,说明该成员能被当前类以及 当前包中的其他类访问,也称在当前包中可见。,42,表
22、3-1 类中成员的4级访问控制权限及范围,3.2.3 访问控制,private权限将访问控制的最小范围限制在一个类中,缺省权限将访问范围扩大至当前包,protected再将范围扩大至子类,public指定最大范围。,3.声明set()和get()方法存取对象的属性,3.2.3 访问控制,对象的属性指对象的某个特性或特征。对象可以有多个属性,各属性的数据类型可不同;不同 的对象具有不同的属性。,例如:MyDate类声明year、month、day成员变量表示年月日属性,但三个 整数合起来构成的不一定是日期。d.month=13;/没有语法错误,却造成逻辑错误 Mydate类必须将成员变量设计为私
23、有权限如下,只有MyDate类自己能够对其成员变量进行操作,保证日期有效。private int year,month,day;/私有的成员变量,MyDate类必须声明若干公有成员方法,提供获得和设置各种属性的功能。,3.声明set()和get()方法存取对象的属性,3.2.3 访问控制,Java约定,存取对象属性的方法分别是set()和get()。,public void set(int y,int m,int d)/设置日期值public void set(MyDate d)/设置日期值,重载public int getYear()/获得年份public int getMonth()/获得
24、月份public int getDay()/获得当月日期,3.2 类的封装性,3.2.1 构造方法3.2.2 this引用和instanceof 对象运算符3.2.3 访问控制3.2.4 静态成员3.2.5 析构方法3.2.6 浅拷贝与深拷贝,实例成员属于对象,包括实例成员变量和实例成员方法。只有创建了实例,才能通过对象访问实例成员变量和调用实例成员方法。,静态成员属于类,需要用关键字static标识。包括类成员变量 和类成员方法。即使没有创建实例,也可以通过类名直接访问静态成员变量和调用静态成员方法。,3.2.4 静态成员,例如:Java在Math类中声明静态成员常量PI表示,声明如下,引用
25、格式 为Math.PI.public static final double PI=3.14159265358979323846;/Math类声明静态成员常量PI表示,在类内部,可直接访问静态成员,省略类名。静态成员也可以通过对象引用。在静态成员方法体中,不能访问实例成员,不能使用this引用。,在声明时,可对静态成员变量赋初值,也可使用static声明静态初始化块,对静态成员变量进行初始化。格式如下,其中只能访问类中的静态成员,且不能引发检测性异常,并在类加载时执行。,3.2.4 静态成员,Static/静态初始化块 静态成员变量初始化;,注意:关键字static在Java中的含义与在C/C
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 初学 简单 课件 封装 继承

链接地址:https://www.31ppt.com/p-6509661.html