Java教材课件05Java面向对象程序设计.ppt

上传人:wuy****n92 文档编号:80463618 上传时间:2023-03-23 格式:PPT 页数:42 大小:249.99KB
返回 下载 相关 举报
Java教材课件05Java面向对象程序设计.ppt_第1页
第1页 / 共42页
Java教材课件05Java面向对象程序设计.ppt_第2页
第2页 / 共42页
点击查看更多>>
资源描述

《Java教材课件05Java面向对象程序设计.ppt》由会员分享,可在线阅读,更多相关《Java教材课件05Java面向对象程序设计.ppt(42页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第5章 Java面向对象程序设计1教学目的要求n理解理解java语言的面向对象技术,包括面向对象语言的面向对象技术,包括面向对象的基本概念、面向对象的程序设计方法;的基本概念、面向对象的程序设计方法;n理解理解java中的类、包、对象、抽象类、接口和中的类、包、对象、抽象类、接口和面向对象的特性;面向对象的特性;n掌握掌握Java语言中类、方法和接口的基本定义及语言中类、方法和接口的基本定义及使用方法;使用方法;n了解包的概念及打包和引入方法;了解包的概念及打包和引入方法;n通过技能实训通过技能实训,掌握一般掌握一般Java程序的面向对象程序的面向对象编程方法编程方法,达到熟练开发达到熟练开发

2、Java一般程序的目的。一般程序的目的。2本章内容本章内容n5.1类类n5.2访问控制符与封装访问控制符与封装n5.3继承继承n5.4非访问控制符接口非访问控制符接口n5.5Java的名字空间和包的名字空间和包n5.6接口接口35.1 类n面向对象回顾面向对象回顾n5.1.1类的定义类的定义n5.1.2类的使用类的使用n5.1.3方法重载方法重载n5.1.4内部类内部类4面向对象回顾(面向对象回顾(1)-基本思想基本思想n面向对象的基本思想面向对象的基本思想面向对象是一种新兴的程序设计方法面向对象是一种新兴的程序设计方法,或者是一种或者是一种新的程序设计规范新的程序设计规范(paradigm)

3、,其基本思想是使用对象、其基本思想是使用对象、类、继承、封装、消息等基本概念来进行程序设计。类、继承、封装、消息等基本概念来进行程序设计。从现实世界中客观存在的事物(即对象)出发来构造从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然软件系统,并且在系统构造中尽可能运用人类的自然思维方式。开发一个软件是为了解决某些问题,这些思维方式。开发一个软件是为了解决某些问题,这些问题所涉及的业务范围称作该软件的问题域。其应用问题所涉及的业务范围称作该软件的问题域。其应用领域不仅仅是软件,还有计算机体系结构和人工智能领域不仅仅是软件,还有计算机体系结构和人工智能等

4、。等。5面向对象回顾(面向对象回顾(1)-基本思想基本思想n1对象的基本概念对象的基本概念对象是系统中用来描述客观事物的一个实体,它是构成系统的对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。服务组成。主动对象是一组属性和一组服务的封装体,其中至少有主动对象是一组属性和一组服务的封装体,其中至少有一个服务不需要接收消息就能主动执行(称作主动服务)。一个服务不需要接收消息就能主动执行(称作主动服务)。n2类的基本概念类的基本概念类是具有相同属性和服务的一组对象的集合

5、,它为属于该类的所类是具有相同属性和服务的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。在面向对象的编程语言中,类是一个独立的程序单位,它应该分。在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。有一个类名并包括属性说明和服务说明两个主要部分。n3消息消息消息就是向对象发出的服务请求,它应该包含下述信息:提供服务消息就是向对象发出的服务请求,它应该包含下述信息:提供服务的对象标识、服务标识、输入信息和回答信息。服务通常被称为方的对象标识、

6、服务标识、输入信息和回答信息。服务通常被称为方法或函数。法或函数。6面向对象回顾(面向对象回顾(2)-基本特性基本特性n1封装性封装性封装性就是把对象的属性和服务结合成一个独立的相同单位,封装性就是把对象的属性和服务结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节,包含两个含义:并尽可能隐蔽对象的内部细节,包含两个含义:把对象的全部属性和全部服务结合在一起,形成一个不可把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(即对象)。分割的独立单位(即对象)。信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个边界或者说形成一道屏障

7、,只保留有限的对外接口使之与外边界或者说形成一道屏障,只保留有限的对外接口使之与外部发生联系。部发生联系。封装的原则在软件上的反映是:要求使对象以外的部分不能封装的原则在软件上的反映是:要求使对象以外的部分不能随意存取对象的内部数据(属性),从而有效的避免了外部错误随意存取对象的内部数据(属性),从而有效的避免了外部错误对它的对它的交叉感染交叉感染,使软件错误能够局部化,大大减少查错和排,使软件错误能够局部化,大大减少查错和排错的难度。错的难度。7面向对象回顾(面向对象回顾(2)-基本特性基本特性n2继承性继承性特殊类的对象拥有其一般类的全部属性与服务,称作特殊类对特殊类的对象拥有其一般类的全

8、部属性与服务,称作特殊类对一般类的继承。一般类的继承。一个类可以是多个一般类的特殊类,它从多个一般类中继承了一个类可以是多个一般类的特殊类,它从多个一般类中继承了属性与服务,这称为多继承。属性与服务,这称为多继承。在在java语言中,通常我们称一般类为父类(语言中,通常我们称一般类为父类(superclass,超类)超类),特殊类为子类,特殊类为子类(subclass)。n3多态性多态性对象的多态性是指在一般类中定义的属性或服务被特殊类继承对象的多态性是指在一般类中定义的属性或服务被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一之后,可以具有不同的数据类型或表现出不同的行

9、为。这使得同一个属性或服务在一般类及其各个特殊类中具有不同的语义。例如:个属性或服务在一般类及其各个特殊类中具有不同的语义。例如:几何图形几何图形的的绘图绘图方法,方法,椭圆椭圆和和多边形多边形都是都是几何图几何图的子类,的子类,其其绘图绘图方法功能不同。方法功能不同。8面向对象回顾(面向对象回顾(3)-面向对象方法学面向对象方法学nOOAObjectOrientedAnalysis面向对象的分析面向对象的分析nOODObjectOrientedDesign面向对象的设计面向对象的设计nOOIObjectOrientedImplementation面向对象的实现面向对象的实现95.1.1类的定

10、义类的定义n类是类是java中的一种重要的复合数据类型,是中的一种重要的复合数据类型,是组成组成java程序的基本要素。它封装了一类对程序的基本要素。它封装了一类对象的状态和方法,是这一类对象的原形。一象的状态和方法,是这一类对象的原形。一个类的实现包括两个部分:类声明和类体个类的实现包括两个部分:类声明和类体n1类声明:类声明:类声明中包括关键字类声明中包括关键字Class,类名及类的属性。类名及类的属性。类声明的格式如下:类声明的格式如下:nclassextendsimplements10n同同时时,在在类类声声明明中中还还可可以以包包含含类类的的父父类类(超超类类),类类所所实实现现的的

11、接接口口以以及及修饰符修饰符public、abstract或或final,这些内容将在后面的几节中分别介绍。,这些内容将在后面的几节中分别介绍。n由由类类定定义义可可知知,类类定定义义包包括括关关键键词词class、类类名名和和类类的的属属性性。类类名名是是Java语言合法的标识符,类名一般具有一定的含义。语言合法的标识符,类名一般具有一定的含义。n(1)类定义修饰符类定义修饰符n类类的的说说明明性性修修饰饰符符说说明明类类的的性性质质和和访访问问权权限限,包包括括public、缺缺省省修修饰饰符符、abstract、final。关于修饰符具体含义后面详细介绍。关于修饰符具体含义后面详细介绍。

12、n(2)extendsnextends说明类的父类说明类的父类,一般形式为一般形式为extends父类名父类名Java语言中,语言中,如果在类说明中无如果在类说明中无extends,则隐含地假设其父类为类。,则隐含地假设其父类为类。115.1.1类的定义类的定义n2类类主主体体类主体是是类主体是是JavaJava类的主体部分,完成变量的说明以及方法的定义及类的主体部分,完成变量的说明以及方法的定义及实现。在类中,用变量来说明类的状态,而用方法来实现类的行为。包实现。在类中,用变量来说明类的状态,而用方法来实现类的行为。包含类主体的类结构如下:含类主体的类结构如下:n n n n n通通常常变变

13、量量在在方方法法前前定定义义(并并不不一一定定要要求求),JavaJava语语言言中中没没有有独独立立的的函函数数和和过程,所有的子程序都是作为类方法定义的。如下所示过程,所有的子程序都是作为类方法定义的。如下所示:nclassclassNamenmemberVariableDeclarationsnmethodDeclarations125.1.1类的定义类的定义n3成员变量成员变量成员变量的声明方式如下:成员变量的声明方式如下:public|protected|privatestaticfinaltransientvolatiletypevariableName;/成员变量成员变量其中,其

14、中,static:静态变量(类变量);相对于实例变量静态变量(类变量);相对于实例变量final:常量常量transient:暂时性变量,用于对象存档,用于对象的串行化,见对暂时性变量,用于对象存档,用于对象的串行化,见对象的串行化一节象的串行化一节volatile:贡献变量,用于并发线程的共享贡献变量,用于并发线程的共享135.1.1类的定义类的定义n4成员方法成员方法说明成员方法定义的一般形式为:说明成员方法定义的一般形式为:n 方法修饰符方法修饰符 ()方法体方法体 n方法说明是指出方法返回类型、方法名、访问权限和入口参数。方法说明是指出方法返回类型、方法名、访问权限和入口参数。n方法修

15、饰符方法修饰符n成员方法修饰符主要有成员方法修饰符主要有public、private、protected、final、static、abstract和和synchronized共共7种,前种,前3种的访问权限、说明形式和含义种的访问权限、说明形式和含义与成员变量一致。修饰符说明详见与成员变量一致。修饰符说明详见5.2、5.4节。节。n方法的返回值类型方法的返回值类型nJava语言要求在成员方法说明中必须指明方法返回值的类型,返回值的语言要求在成员方法说明中必须指明方法返回值的类型,返回值的类型为类型为Java语言的任何数据类型。如果一个成员方法不需要返回值,则语言的任何数据类型。如果一个成员方

16、法不需要返回值,则其返回值的类型被说明为其返回值的类型被说明为void。方法返回值用。方法返回值用return语句来实现,如果语句来实现,如果有返回值,那么有返回值,那么return语句要带参数,并且语句要带参数,并且return语句中返回的数据类语句中返回的数据类型必须与方法说明中的方法返回值的类型一致。型必须与方法说明中的方法返回值的类型一致。14n方法名方法名n成成员员方方法法名名是是JavaJava语语言言合合法法的的标标识识符符,为为了了提提高高程程序序的的可可读读性,成员方法名一般具有一定的含义。性,成员方法名一般具有一定的含义。n参数列表参数列表n成成员员方方法法的的参参数数列列

17、表表是是由由逗逗号号分分隔隔的的类类型型及及参参数数名名组组成成,是是可选项。类型可以是可选项。类型可以是JavaJava语言的任何数据类型。语言的任何数据类型。n方法体方法体n方法体是一个方法定义的主要部分,包含了所有实现方法功方法体是一个方法定义的主要部分,包含了所有实现方法功能的能的Java语言程序代码。在方法体中可以定义局部变量,它语言程序代码。在方法体中可以定义局部变量,它的作用域仅在方法体内,当方法被执行结束之后,该方法内的作用域仅在方法体内,当方法被执行结束之后,该方法内部的所有局部变量也就失效了,局部变量不能与参数列表中部的所有局部变量也就失效了,局部变量不能与参数列表中参数名

18、同名。方法体用参数名同名。方法体用“”括起来。括起来。15【例【例5-2】定义一个方法,方法功能为根据参数定义一个方法,方法功能为根据参数r r的大小,返回的大小,返回圆的面积。在类中赋参数圆的面积。在类中赋参数r r,并且输出面积值。,并且输出面积值。public class Li5_02public class Li5_02public static void main(String args)public static void main(String args)double k;double k;Li5_02 mj=new Li5_02();Li5_02 mj=new Li5_02()

19、;k=mj.area(5);k=mj.area(5);System.out.println(k);System.out.println(k);public double area(int r)public double area(int r)/定义定义areaarea方法,带有一个参数方法,带有一个参数final double PI=3.14;final double PI=3.14;/定义常量定义常量PIPI,并赋初值,并赋初值3.143.14return PI*r*r;return PI*r*r;/根据根据r r的值,计算面积后,返回面积值的值,计算面积后,返回面积值 运行结果为运行结果为

20、:78.578.5165.1.1 类的定义n5.构造方法构造方法构造方法是一种特殊的方法,主要用于为类的方法中变量赋构造方法是一种特殊的方法,主要用于为类的方法中变量赋初始值的功能。当用初始值的功能。当用newnew创建一个类的新的对象时,构造方法就立创建一个类的新的对象时,构造方法就立即执行。构造方法名字必须与类名相同。除了构造方法,在类中即执行。构造方法名字必须与类名相同。除了构造方法,在类中不能出现与类名相同的方法。构造方法的语法为:不能出现与类名相同的方法。构造方法的语法为:npublic public 类名(类名(参数列表参数列表)n 语句序列;语句序列;n nJava语言中每个类都

21、有构造方法,如果一个类中没有说明该类的语言中每个类都有构造方法,如果一个类中没有说明该类的构造方法,则系统将提供隐含的不带任何参数的构造方法,这个构造方法,则系统将提供隐含的不带任何参数的构造方法,这个空的构造方法其实什么也不做。一旦我们定义了自己的构造方法,空的构造方法其实什么也不做。一旦我们定义了自己的构造方法,Java编译器就不再添加这种缺省的构造方法。编译器就不再添加这种缺省的构造方法。175.1.1 类的定义n构造方法的特点构造方法的特点:n构造方法没有返回值类型,甚至没有构造方法没有返回值类型,甚至没有voidvoid。其修饰符只能是访问控制。其修饰符只能是访问控制修饰符,即修饰符

22、,即publicpublic、privateprivate、protectedprotected中的任一个。中的任一个。n构造方法不能从父类中继承。构造方法不能从父类中继承。n构构造造方方法法可可以以重重载载,一一个个类类可可以以有有任任意意多多个个构构造造方方法法。不不同同的的构构造造方方法根据参数的不同状态来选择合适的构造方法。法根据参数的不同状态来选择合适的构造方法。n构造方法不能直接通过方法名引用,必须通过构造方法不能直接通过方法名引用,必须通过newnew运算符。运算符。n在构造方法中可以调用当前类和其父类的另一个构造方法,但必须是在构造方法中可以调用当前类和其父类的另一个构造方法,

23、但必须是方法体的第一条语句。使用当前类的构造方法用方法体的第一条语句。使用当前类的构造方法用this来引用,使用其父类来引用,使用其父类的构造方法用的构造方法用super来引用。来引用。185.1.2 对象的使用 n5.1.2.1对象创建对象创建n在在JavaJava语语言言中中,一一个个JavaJava对对象象是是类类的的一一个个实实例例,创创建建一一个个对对象象就就是是创创建建类类的的一一个个实实例例,对对象象即即类类的的实实例例化化。newnew运运算算符符用用于于创创建建一一个个类类的的实实例例并并返返回回对对象象的的引引用用。对对象象创创建建包包括括对对象象声声明明,实实例例化化和和

24、初始化三方面的内容。一般格式为:初始化三方面的内容。一般格式为:ntype type 对象名对象名=new type(=new type(参数列表参数列表);n其其中中typetype为为引引用用组组合合类类型型(包包括括类类和和接接口口)。该该格格式式声声明明了了一一个个类类型型为为typetype的的对对象象。对对象象的的声声明明并并不不为为对对象象分分配配内内存存空空间间。用用运运算算符符newnew为对象分配内存空间,实例化一个对象。比如:为对象分配内存空间,实例化一个对象。比如:nString UserName=new String(“zhangsan”);String UserNa

25、me=new String(“zhangsan”);195.1.2 对象的使用5.1.2.2 对象使用对象使用对对象象的的使使用用包包括括引引用用对对象象的的成成员员变变量量和和方方法法,通通过过运运算算符符“”“”可可以以实实现现对对实实例例变变量量的的访访问问和和实实例例方方法法的的调调用用,变变量量和和方方法法还还可可以以设设定定一一定定的的访访问问权权限限来来允允许许或或禁禁止止其其他他对对象象对对它它的的访访问问。通通常常有有两两种种途径来使用对象:途径来使用对象:1.1.引用对象中的变量引用对象中的变量引用对象的变量的一般形式为引用对象的变量的一般形式为:.2.2.引用对象中的方法

26、引用对象中的方法引用对象中的方法的一般形式为:引用对象中的方法的一般形式为:.()其中,参数列表是可选项。在进行对象方法的引用时,方法中参数其中,参数列表是可选项。在进行对象方法的引用时,方法中参数的个数、参数的数据类型与原方法中定义的要一致,否则编译时会的个数、参数的数据类型与原方法中定义的要一致,否则编译时会出错。出错。205.1.2 对象的使用n5.1.2.3对象数组对象数组n前前面面已已经经讲讲过过,数数组组的的元元素素不不仅仅可可以以是是基基本本数数据据类类型型,也也可可以以是是对对象象。在在实实际际应应用用中中,更更普普遍遍的的可可能能是是数数组组元元素素是是对对象象的的对对象象数

27、数组组了了。下下面面用用CCircleCCircle类类作作为为例例子子介介绍绍对对象象数数组组的的创创建建和和使使用用。如如果果定定义义CCircleCCircle类类(见见例例5.45.4源源程程序序),那那么么,如如何何来来创创建建和和操操纵纵CCircleCCircle类类的的对对象象的的一一个个数数组组呢呢?实实际际上上,对对象象数数组组的的创创建建与与基基本本数数据据类类型型的的数数组组是是一一样样的的,分两步进行:分两步进行:n1.1.声明类类型的数组变量,并用声明类类型的数组变量,并用newnew分配内存空间给数组;分配内存空间给数组;n2.2.用用newnew产生新的对象,并

28、分配内存空间给它。产生新的对象,并分配内存空间给它。215.1.2 对象的使用5.1.2.4对象释放对象释放n如如前前所所述述,用用newnew来来创创建建新新的的对对象象,此此时时JavaJava便便会会分分配配内内存存空空间间给给它它。如如果果此此对对象象不不在在使使用用了了,JavaJava一一样样可可回回收收它它所所占占的的内内存存空空间间。其其作作法法是是,把把指指向向该该对对象象的的值值设设置置为为nullnull。该该对对象象便便成成了了无无用用对对象象,JavaJava系系统统通通过过垃垃圾圾回回收收器器GCGC(Garbage Garbage CollectorCollect

29、or)周周期期性性地地释释放放无无用用对对象象所所使使用用的的内内存存,完完成成对对象象的的清清除除工工作作。同同样样当当对对象象数数组组中中的的对对象象不不在在使使用用时时,可可以以先把对象数组中的元素置上先把对象数组中的元素置上nullnull,然后让,然后让JavaJava内存垃圾回收器自动回收。内存垃圾回收器自动回收。n当当不不存存在在着着对对一一个个对对象象的的引引用用时时,该该对对象象就就成成为为一一个个无无用用对对象象。GCGC自自动动扫扫描描对对象象的的动动态态内内存存区区,对对被被引引用用的的对对象象添添加加标标记记,然然后后把把没没有有引引用用的的对对象作为垃圾收集起来并加

30、以释放。象作为垃圾收集起来并加以释放。nGCGC在在JavaJava中中作作为为一一个个线线程程来来运运行行的的,即即调调用用System.gc()System.gc(),当当要要求求垃垃圾圾收收集时,该线程与系统同步运行;否则在系统空闲之时异步地运行。集时,该线程与系统同步运行;否则在系统空闲之时异步地运行。n此外,在此外,在Java系统开始运行时,会自动调用一个名为系统开始运行时,会自动调用一个名为finalize()方法,使方法,使它清除对象所占的内存。比它清除对象所占的内存。比C+中用中用delete和和C中用中用free来释放内存的来释放内存的措施好得多。措施好得多。225.1.3

31、方法重载 在在JavaJava类中可以创建名字相同,但是参数不同和返回值不同的几个类中可以创建名字相同,但是参数不同和返回值不同的几个方法,这就是方法重载(方法,这就是方法重载(overloadingoverloading),),JavaJava系统通过参数和返回值系统通过参数和返回值来分辨具体是哪一个方法。通过方法重载,一个类中可以有多个具有相来分辨具体是哪一个方法。通过方法重载,一个类中可以有多个具有相同名字的方法,传递给它们的不同个数和类型的参数来决定使用那种方同名字的方法,传递给它们的不同个数和类型的参数来决定使用那种方法,这就是多态。法,这就是多态。构造方法是一种特殊的方法。构造方法

32、是一种特殊的方法。JavaJava中的每个类都有构造方法,用来中的每个类都有构造方法,用来初始化该类的一个新的对象。在构造方法的实现中,为了实现不同对象初始化该类的一个新的对象。在构造方法的实现中,为了实现不同对象的不同初始化值,也可以进行方法重载,所以类可以有多个构造方法,的不同初始化值,也可以进行方法重载,所以类可以有多个构造方法,并且它们共享同一个名字,构造方法可以通过参数的类型和数目区分。并且它们共享同一个名字,构造方法可以通过参数的类型和数目区分。构造方法使用它的参数初始化新对象的状态,当创建对象时,应该选择构造方法使用它的参数初始化新对象的状态,当创建对象时,应该选择其参数最能反映

33、所初始化的新对象的构造方法,根据传给构造方法的参其参数最能反映所初始化的新对象的构造方法,根据传给构造方法的参数数目和类型的不同,数数目和类型的不同,JavaJava编译器可以决定使用那个构造方法。编译器可以决定使用那个构造方法。23n内部类内部类n 在在类类内内部部可可定定义义成成员员变变量量和和方方法法,其其实实,在在类类内内部部也也可可以以定定义义另另一一个个类类。如如果果在在类类A A的的内内部部再再定定义义一一个个类类B B,此此时时类类B B称称为为内内部部类,而类类,而类A A则称为外部类。则称为外部类。n 内内部部类类可可声声明明为为public或或private。当当内内部部

34、类类声声明明成成public或或private时时,其其访访问问限限制制与与成成员员变变量量或或方方法法完完全全相相同同。关关于于内部类的用法详见第内部类的用法详见第8章章8.3节。节。5.1.4 内部类245.2 访问控制符和封装访问控制符和封装 n前已述及,前已述及,Java的类成员主要有访问修饰符的类成员主要有访问修饰符:private、protected、public和和default,具体存取权限见表,具体存取权限见表5-1。n 表表5-1不同访问修饰符的具体存取权限不同访问修饰符的具体存取权限publicdefaultprotectedprivate可被相同包的非子类访问YesYe

35、sYesNo可被相同包的子类访问YesYesYesNo可被不同包的非子类访问YesNoNoNo可被不同包的子类访问YesNoNoNo可被相同包的子类继承YesYesYesNo可被不同包的子类继承YesNoYesNo255.3 继承 5.3.1子类和简单继承举例子类和简单继承举例按定义为类的格式,如果有如下类按定义为类的格式,如果有如下类A A声明:声明:class class 类名类名A extends A extends 父类父类BimplementsBimplements 则则说说明明新新定定义义的的类类A A是是父父类类B B的的子子类类。如如果果缺缺省省extendsextends子子

36、句句,则则该该类类为为的的子子类类。子子类类可可以以继继承承父父类类中中访访问问权权限限为为publicpublic、protectedprotected等等的的成成员员变变量量和和方方法法,但但不不能能继继承承访访问问权权限限为为privateprivate的的成成员员和和方方法法。有有了了继继承承机机制制,在在编编写写程程序序时时,就就可可以以先先定定义义一一个个包包含含公公共共变变量量和和公公用用方方法法的的类类作作为为父父类类,再再在在此此基基础础上上创创建建具具有有专专用用变变量量和和专专用用方方法法的的子子类类。子子类类一一方方面面继继承承父父类类中中已已有有的的变变量量和和方方法

37、法(普普遍遍性性原原则则),另另一一方方面面子子类类还还可可以以增加父类中所没有的变量和方法(特殊性原则)。增加父类中所没有的变量和方法(特殊性原则)。265.3 继承5.3.2变量隐藏和方法覆盖变量隐藏和方法覆盖 子类继承父类后,如果出现子类的成员变量和父类的成员变量同名,那子类继承父类后,如果出现子类的成员变量和父类的成员变量同名,那么子类将把父类的成员变量隐藏起来。在这种情况下,子类使用的变量是它么子类将把父类的成员变量隐藏起来。在这种情况下,子类使用的变量是它自己的变量,而不是父类的成员变量,那么子类如果要调用父类的变量,则自己的变量,而不是父类的成员变量,那么子类如果要调用父类的变量

38、,则必须借用下一小节要阐述的关键字必须借用下一小节要阐述的关键字super。另外一种情况是子类的方法名与父。另外一种情况是子类的方法名与父类的方法名相同(返回值的类型和入口参数的数目、类型均相同),那么在类的方法名相同(返回值的类型和入口参数的数目、类型均相同),那么在子类中重新改写了父类的同名方法,即子类方法覆盖(子类中重新改写了父类的同名方法,即子类方法覆盖(overriding)了父类)了父类的方法。通过方法重写,子类可以重新实现父类的某些方法,使其具有自己的方法。通过方法重写,子类可以重新实现父类的某些方法,使其具有自己的特征。的特征。方法覆盖与重载均是方法覆盖与重载均是JavaJav

39、a多态的技巧之一,但两者之间也有不同之处:多态的技巧之一,但两者之间也有不同之处:重重载载:英英文文名名称称为为overloadingoverloading,意意指指在在同同一一个个类类中中,定定义义多多个个名名称称相相同同,但但参参数数个个数数或或类类型型不不同同的的方方法法,JavaJava根根据据参参数数的的个个数数或或类类型型,调调用用相相对对应应的的方法。方法。覆盖:英文名称为覆盖:英文名称为overriding,是指在子类中,定义名称、参数个数与类是指在子类中,定义名称、参数个数与类型均与父类相同的方法,用以改写父类中的方法的功能。型均与父类相同的方法,用以改写父类中的方法的功能。

40、275.3.3super和和this在在JavaJava中中,执执行行子子类类的的构构造造方方法法之之前前或或子子类类没没有有明明确确地地指指定定构构造造方方法法,会会自自动动调调用用父父类类中中没没有有参参数数的的构构造造方方法法,其其目目的的是是为为了了帮帮助助继继承承自自父父类类的的成成员员变变量量做做初初始始化化操操作作。问问题题是是,如如果果父父类类有有多多个个构构造造方方法法,如如何何才才能能调调用用父父类类中中特特定定的的构构造造方方法法呢呢?如如果果在在子子类类中中还还需需要要用用到到父父类类中中被被隐隐藏藏的的变变量量或或者者被被覆覆盖盖了了的的方方法法,该该怎怎么么办办呢呢

41、?JavaJava提提供供了了关关键键字字supersuper来来实实现现对对父父类类的的成成员员和和方方法法的的访访问问。SuperSuper有有三三种种情情况况可可以以使使用:用:用来访问父类中被覆盖的方法;用来访问父类中被覆盖的方法;用来调用父类中的构造方法;用来调用父类中的构造方法;用来访问父类中被隐藏的成员变量。用来访问父类中被隐藏的成员变量。5.3 继承285.3 继承n调用构造方法遵循以下的几条规则:调用构造方法遵循以下的几条规则:n当当一一个个类类创创建建对对象象时时,可可以以调调用用该该类类的的父父类类的的构构造造方方法法。调调用用父父类类的的构构造造方方法法很很简简单单,只

42、只要要在在类类的的构构造造方方法法的的方方法法体体中中,第第一一条条为为supersuper语语句句就就可可以以了了。supersuper可可以以调调用用父父类类的的任任何何一一个个带带入入口口参参数数或或不不带带入入口口参数的构造方法。参数的构造方法。n如如果果一一个个类类的的构构造造方方法法中中第第一一条条语语句句没没有有用用supersuper来来调调用用父父类类的的构构造造方方法法,则则编编译译器器也也会会默默认认在在构构造造方方法法中中用用supersuper()语语句句调调用用父父类类的的无无参构造方法。参构造方法。n如如果果某某个个类类的的构构造造方方法法的的第第一一条条语语句句

43、是是用用thisthis来来调调用用本本类类的的另另外外一一个个构构造造方方法法,那那么么JavaJava系系统统就就不不会会默默认认这这个个构构造造方方法法调调用用父父类类的的构构造造方法。方法。n一一个个构构造造方方法法是是用用this语语句句调调用用本本类类的的另另一一个个构构造造方方法法时时,如如果果被被调调用用的的构构造造方方法法又又是是调调用用父父类类的的构构造造方方法法而而又又没没有有用用super语语句句,那那么么编编译译器器会会默默认认它它含含有有super()语语句句。此此时时,父父类类中中若若不不存存在在无无参参的构造方法,也将会导致编译出错。的构造方法,也将会导致编译出

44、错。295.3 继承n5.3.4运行时多态与多重继承运行时多态与多重继承nJava中每一种操作,操作数据的类型必须合法。中每一种操作,操作数据的类型必须合法。父类有的方法子类都有,凡是能够使父类生成对父类有的方法子类都有,凡是能够使父类生成对象的地方,都可以使用子类生成对象。象的地方,都可以使用子类生成对象。n运行时多态有以下两条规则:运行时多态有以下两条规则:n对对子子类类的的一一个个实实例例,如如果果子子类类重重写写(覆覆盖盖)了了父类的方法,则运行时系统就调用子类的方法。父类的方法,则运行时系统就调用子类的方法。n如如果果子子类类继继承承了了父父类类的的方方法法,则则运运行行时时系系统统

45、就就仍调用父类的方法。仍调用父类的方法。30n5.3.5 对象类型转换n前面已经讲过基本数据类型的转换,实际上Java中两个不同类型对象之间也可以转换,不过有个限制:两个转换的对象之间应该具有继承关系,也就是说只是在子类和父类的对象之间进行转换,而不是任意两个类。n一个子类对象的类型可以向上转换成它的父类类型,这个转换过程是安全的。因为父类所具有的信息,子类一般全有。当然,转换过程中会丢失属于子类而不属于父类的信息。其中大学生和研究生是学生的子类。n按照前面所说的原则,以下转换过程是安全的:nUndergraduateStudent anUGS=new UndergraduateStudent

46、();nStudent aStudent=(Student)anUGS;n但是反过来,一个父类对象的类型未必可以向下转换成子类的对象的类型,因为子类具有的信息,父类未必包含。所以只有当父类对象实际上是子类的一个实例的时候,才可以转换,否则不能进行这种转换。315.3 继承n5.3.6抽象类抽象类nJavaJava也也可可以以创创建建专专门门的的类类用用来来当当作作父父类类,这这种种类类称称为为抽抽象象类类(abstract abstract classclass)。抽抽象象类类有有点点类类似似“模模板板”的的作作用用,其其目目的的是是要要你你根根据据它它的的格格式式来来修修改改并并创创建建新新

47、的的类类。不不能能够够通通过过抽抽象象类类直直接接创创建建对对象象,只只能能通通过过抽抽象象类类派派生生的新的类,再由新类创建对象。定义一个抽象类的格式为:的新的类,再由新类创建对象。定义一个抽象类的格式为:nabstract class abstract class 类名称类名称 n声明数据成员;声明数据成员;n返回值的数据类型返回值的数据类型 方法名称(参数列表)方法名称(参数列表)n 定义普通的方法定义普通的方法n nabstractabstract返回值的数据类型返回值的数据类型 方法名称(参数列表)方法名称(参数列表);/;/定义抽象的方法定义抽象的方法n n注意:在抽象类中,方法的

48、定义可分为两种:一种是普通方法;另一种是抽注意:在抽象类中,方法的定义可分为两种:一种是普通方法;另一种是抽象方法,此方法以象方法,此方法以abstract开头,且只声明了返回值的数据类型、方法名称、开头,且只声明了返回值的数据类型、方法名称、所需参数,但没有方法体。这样,抽象方法中的处理方式必须在子类中完全所需参数,但没有方法体。这样,抽象方法中的处理方式必须在子类中完全实现。实现。325.4 非访问控制符 n5.4.1staticn在在类类中中声声明明一一个个变变量量或或方方法法时时,还还可可以以指指定定它它为为实实例例成员或类成员。其格式为:成员或类成员。其格式为:nstatic sta

49、tic 类型类型 变量名;变量名;nstatic static 返回值类型返回值类型 方法名(方法名(参数列表参数列表)nn n上述用上述用static修饰的变量和方法分别称为类变量和类方修饰的变量和方法分别称为类变量和类方法,也称静态变量和静态方法。如果没有法,也称静态变量和静态方法。如果没有static修饰,修饰,则分别称为实例变量和实例方法。则分别称为实例变量和实例方法。335.4 非访问控制符n5.4.2finaln从从安安全全性性和和面面向向对对象象程程序序设设计计上上考考虑虑,一一些些类类不不希希望望被被继继承承,可可以以用用finalfinal关键字来修饰。下列情况通常某些类被定

50、义为关键字来修饰。下列情况通常某些类被定义为finalfinal类:类:n定定义义为为finalfinal类类通通常常是是一一些些有有固固定定作作用用,用用来来完完成成某某种种标标准准功功能能的的类类。例例如如,JavaJava中中的的StringString类类,它它对对编编译译器器与与解解释释器器的的正正常常运运行行有有很很重重要要的的作作用用,所以被修饰为所以被修饰为finalfinal类。类。n如如果果认认为为一一个个类类的的定定义义已已经经很很完完美美,不不需需要要再再生生成成它它的的子子类类时时,就就说说明明为为finalfinal类。有些方法不能被重写(覆盖),也把它限定为类。有

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com