您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > java程序设计使用教程(第二版)
1第5章Java面向对象程序设计OOPProgramming2教学目的要求理解java语言的面向对象技术,包括面向对象的基本概念、面向对象的程序设计方法;理解java中的类、包、对象、抽象类、接口和面向对象的特性;掌握Java语言中类、方法和接口的基本定义及使用方法;了解包的概念及打包和引入方法;通过技能实训,掌握一般Java程序的面向对象编程方法,达到熟练开发Java一般程序的目的。3本章内容contents5.1类class5.2访问控制符AccessControlModifier与封装encapsulation5.3继承inheritance5.4非访问控制符接口static,final,volatile,native,synchronized5.5Java的名字空间namespace和包package5.6接口interface45.1类面向对象回顾5.1.1类的定义5.1.2类的使用5.1.3方法重载5.1.4内部类5面向对象回顾(1)-基本思想面向对象的基本思想面向对象是一种新兴的程序设计方法,或者是一种新的程序设计规范(paradigm),其基本思想是使用对象、类、继承、封装、消息等基本概念来进行程序设计。从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。开发一个软件是为了解决某些问题,这些问题所涉及的业务范围称作该软件的问题域。其应用领域不仅仅是软件,还有计算机体系结构和人工智能等。6面向对象回顾(1)-基本思想1.对象的基本概念对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。主动对象是一组属性和一组服务的封装体,其中至少有一个服务不需要接收消息就能主动执行(称作主动服务)。2.类的基本概念类是具有相同属性和服务的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。3.消息消息就是向对象发出的服务请求,它应该包含下述信息:提供服务的对象标识、服务标识、输入信息和回答信息。服务通常被称为方法或函数。7面向对象回顾(2)-基本特性1.封装性encapsulation封装性就是把对象的属性和服务结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节,包含两个含义:◇把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(即对象)。◇信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个边界〔或者说形成一道屏障〕,只保留有限的对外接口使之与外部发生联系。封装的原则在软件上的反映是:要求使对象以外的部分不能随意存取对象的内部数据(属性),从而有效的避免了外部错误对它的交叉感染,使软件错误能够局部化,大大减少查错和排错的难度。8面向对象回顾(2)-基本特性2.继承性inheritance特殊类的对象拥有其一般类的全部属性与服务,称作特殊类对一般类的继承。一个类可以是多个一般类的特殊类,它从多个一般类中继承了属性与服务,这称为多继承。在java语言中,通常我们称一般类为父类(superclass,超类),特殊类为子类(subclass)。3.多态性polymorphism对象的多态性是指在一般类中定义的属性或服务被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或服务在一般类及其各个特殊类中具有不同的语义。例如:几何图形的绘图方法,椭圆和多边形都是几何图的子类,其绘图方法功能不同。9面向对象回顾(3)-面向对象方法学OOA-ObjectOrientedAnalysis面向对象的分析OOD-ObjectOrientedDesign面向对象的设计OOI-ObjectOrientedImplementation面向对象的实现105.1.1类的定义类是java中的一种重要的复合数据类型,是组成java程序的基本要素。它封装了一类对象的状态和方法,是这一类对象的原形。一个类的实现包括两个部分:类声明和类体1.类声明:类声明中包括关键字class,类名及类的属性。类声明的格式如下:[修饰符]class类名[extends父类][implements接口名]PublicclassDemoextendsAppletimplementsActionListener{….}11同时,在类声明中还可以包含类的父类(超类),类所实现的接口以及修饰符public、abstract或final,这些内容将在后面的几节中分别介绍。由类定义可知,类定义包括关键词class、类名和类的属性。类名是Java语言合法的标识符,类名一般具有一定的含义。(1)类定义修饰符类的说明性修饰符说明类的性质和访问权限,包括public、缺省修饰符、abstract、final。关于修饰符具体含义后面详细介绍。(2)extendsextends说明类的父类,一般形式为extends〈父类名〉Java语言中,如果在类说明中无extends,则隐含地假设其父类为Java.lang.object类。12定义一个点类classPoint{intx,y;voidinit(intix,intiy){X=ix;Y=iy;}}135.1.1类的定义2.类主体类主体是是Java类的主体部分,完成变量的说明以及方法的定义及实现。在类中,用变量来说明类的状态,而用方法来实现类的行为。包含类主体的类结构如下:类声明{成员变量的声明成员方法的声明及实现}通常变量在方法前定义(并不一定要求),Java语言中没有独立的函数和过程,所有的子程序都是作为类方法定义的。如下所示:classclassName{memberVariableDeclarationsmethodDeclarations}145.1.1类的定义3.成员变量成员变量的声明方式如下:[public|protected|private][static][final][transient][volatile]typevariableName;//成员变量其中,static:静态变量(类变量);相对于实例变量final:常量transient:暂时性变量,用于对象存档,用于对象的串行化,见对象的串行化一节volatile:贡献变量,用于并发线程的共享155.1.1类的定义4.成员方法说明成员方法定义的一般形式为:[方法修饰符]方法返回值类型方法名([参数列表]){方法体}方法说明是指出方法返回类型、方法名、访问权限和入口参数。⑴方法修饰符成员方法修饰符主要有public、private、protected、final、static、abstract和synchronized共7种,前3种的访问权限、说明形式和含义与成员变量一致。修饰符说明详见5.2、5.4节。⑵方法的返回值类型Java语言要求在成员方法说明中必须指明方法返回值的类型,返回值的类型为Java语言的任何数据类型。如果一个成员方法不需要返回值,则其返回值的类型被说明为void。方法返回值用return语句来实现,如果有返回值,那么return语句要带参数,并且return语句中返回的数据类型必须与方法说明中的方法返回值的类型一致。16⑶方法名成员方法名是Java语言合法的标识符,为了提高程序的可读性,成员方法名一般具有一定的含义。⑷参数列表成员方法的参数列表是由逗号分隔的类型及参数名组成,是可选项。类型可以是Java语言的任何数据类型。⑸方法体方法体是一个方法定义的主要部分,包含了所有实现方法功能的Java语言程序代码。在方法体中可以定义局部变量,它的作用域仅在方法体内,当方法被执行结束之后,该方法内部的所有局部变量也就失效了,局部变量不能与参数列表中参数名同名。方法体用“{}”括起来。17publicclassLi5_02{publicstaticvoidmain(Stringargs[]){doublek;Li5_02mj=newLi5_02();k=mj.area(5);System.out.println(k);}publicdoublearea(intr){//定义area方法,带有一个参数finaldoublePI=3.14;//定义常量PI,并赋初值3.14returnPI*r*r;//根据r的值,计算面积后,返回面积值}}运行结果为:78.5【例5-2】定义一个方法,方法功能为根据参数r的大小,返回圆的面积。在类中赋参数r,并且输出面积值。185.1.1类的定义5.构造方法构造方法是一种特殊的方法,主要用于为类的方法中变量赋初始值的功能。当用new创建一个类的新的对象时,构造方法就立即执行。构造方法名字必须与类名相同。除了构造方法,在类中不能出现与类名相同的方法。构造方法的语法为:public类名([参数列表]){[语句序列;]}Java语言中每个类都有构造方法,如果一个类中没有说明该类的构造方法,则系统将提供隐含的不带任何参数的构造方法,这个空的构造方法其实什么也不做。一旦我们定义了自己的构造方法,Java编译器就不再添加这种缺省的构造方法。195.1.1类的定义构造方法的特点:⑴构造方法没有返回值类型,甚至没有void。其修饰符只能是访问控制修饰符,即public、private、protected中的任一个。⑵构造方法不能从父类中继承。⑶构造方法可以重载,一个类可以有任意多个构造方法。不同的构造方法根据参数的不同状态来选择合适的构造方法。⑷构造方法不能直接通过方法名引用,必须通过new运算符。⑸在构造方法中可以调用当前类和其父类的另一个构造方法,但必须是方法体的第一条语句。使用当前类的构造方法用this来引用,使用其父类的构造方法用super来引用。205.1.2对象的使用5.1.2.1对象创建在Java语言中,一个Java对象是类的一个实例,创建一个对象就是创建类的一个实例,对象即类的实例化。new运算符用于创建一个类的实例并返回对象的引用。对象创建包括对象声明,实例化和初始化三方面的内容。一般格式为:type对象名=newtype([参数列表]);其中type为引用组合类型(包括类和接口)。该格式声明了一个类型为type的对象。对象的声明并不为对象分配内存空间。用运算符new为对象分配内存空间,实例化一个对象。比如:StringUserName=newString(“zhangsan”);215.1.2对象的使用5.1.2.2对象使用对象的使用包括引用对象的成员变量和方法,通过运算符“·”可以实现对实例变量的访问和实例方法的调用,变量和方法还可以设定一定的访问权限来允许或禁止其他对象对它的访问。通常有两种途径来使用对象:1.引用对象中的变量引用对象的变量的一般形式为:对象名.变量名2.引用对象中的方法引用对象中的方法的一般形式为:对象名.方法名([参数列表])其中,参数列表是可选项。在进行对象方法的引用时,方法中参数的个数、参数的数据类型与原方法中定义的要一致,否则编译时会出错。225.1.2对象的使用5.1.2.3对象数组前面已经讲过,数组的元素不仅可以是基本数据类型,也可以是对象。在实际应用中,更普遍的可能是数组元素是对象的对象数组了。下面用CCircle类作为例子介绍对象数组的创建和使用。如果定义CCircle类(见例5.4源程序),那么,如何来创建和操纵CCircle类的对象的一个数组呢?实际上,对象数组的创建与基本数据类型的数组是一样的,分两步进行:1.声明类类型的数组变量,并用new分配内存空间给数组;2.用new产生新的对象,并分配内存空间给它。235.1.2对象的使用5.1.2.4对象释放如前所述,用new来创建新的对象,此时Java便会分配内存空间给它。如果此对象不在使用了,Java一样可回收它所占的内
本文标题:java程序设计使用教程(第二版)
链接地址:https://www.777doc.com/doc-3381318 .html