zhouLz-类与对象.ppt_第1页
zhouLz-类与对象.ppt_第2页
zhouLz-类与对象.ppt_第3页
zhouLz-类与对象.ppt_第4页
zhouLz-类与对象.ppt_第5页
已阅读5页,还剩133页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,第4章,类与对象,2,面向对象编程,3,相关概念,4,对象,对象是客观存在的具体实体,具有明确定义的状态和行为。,5,对象的示例,收银员对象,顾客对象,顾客姓名:朱丽叶年龄:28体重:52千克操作:购买商品,状态,姓名:布兰尼职衔:收银员年龄:35体重:60千克操作:收款打印帐单,行为,6,类,类是用于组合各个对象所共有操作和属性的一种机制,形状类,动物类,汽车类,类的示例,“类是具有相同属性和行为的一组对象的集合”,7,类和对象的示例,收银员,系统管理员,仓库管理员,促销员,采购经理,8,属性,事物的特性,在类中表示为变量每个对象的每个属性都拥有其特有的值属性名称由类的所有实例共享,住址,姓名,属性,年龄,“在类中表示对象或实体拥有的特性时称为属性”,9,方法,“对象执行的操作称为方法。”,10,方法的示例,缝衣服的步骤,量尺寸,得到工具,缝衣服,方法,缝制衣服,裁缝,11,类和对象的区别,类是概念模型,定义对象的所有特性和所需的操作,对象是真实的模型,类定义实体,对象是实际的实体,12,面向对象的基本特征,13,封装性,信息隐藏,隐藏对象的实现细节,不让用户看到将东西包装在一起,然后以新的完整形式呈现出来例如,两种或多种化学药品组成一个胶囊将方法和属性一起包装到一个单元中,单元以类的形式实现,“隐藏属性、方法或实现细节的过程称为封装。”,14,封装的示例3-1,接口,采购经理,罗杰斯先生,法拉力公司,.,迪斯尼汽车公司,.,市场经理,雪莉女士,要求,15,封装的示例3-2,有选择地提供数据,法拉力公司,迪斯尼汽车公司,16,封装的示例3-3,实体法拉力公司,实体迪斯尼汽车公司,AutiLtd,.,ButoLtd,.,17,继承性,父类,子类,18,多态性,父类,子类-绘制和移动三角形,子类-绘制和移动矩形,子类-绘制和移动五边形,子类,19,4.1类(P56),面向对象程序设计方法是指用面向对象的方法指导程序设计的整个过程。所谓面向对象是指以对象为中心,分析、设计及构造应用程序的机制特点:是将分析问题的视角定位于现实世界中存在的实体。,20,在面向对象的程序设计中,将数据与对数据进行的操作合起来定义为类。类是将数据和与数据相关的操作封装在一起的集合体,用来定义一组对象共同具有的状态(属性)和行为(方法)的模板。类是一种复杂的数据类型,它不但包含数据,还包含了对数据进行操作的方法(Method),通常将类中的数据称为成员变量,而操作数据的方法称为成员方法,二者统称为类的成员。,21,4.1.1类的定义(P56),在Java中,类是一种引用型数据类型。类是对现实世界实体抽象的结果,其主要包含对实体属性及作用在这些属性上的行为能力的描述。在编写程序时,首先需要对抽象的实体特征用类加以描述,即进行类的定义。类定义格式为:修饰符class类名extends超类名implements接口名列表类体,22,修饰符:public(公共):public修饰的类能被所有的类访问。abstract(抽象):abstract修饰的类不能被实例化,它包含有未实现的方法。final(最终):final修饰的类不能被继承,即不能有子类。注意:abstract和final不能同时作为一个类的修饰符。类名类的名字不能是Java中的关键字,要符合标识符规定,即名字可以由字母,下划线,数字或美圆符号组成,并且第一个字符不能是数字。但给类命名时,最好遵守如下习惯:如果类名使用拉丁字母,那么名字的首写字母使用大写字母,例如Hello、Time、People等。类名最好见名知意,当类名由几个”单词”复合而成时,每个单词的首写字母使用大写,如BeijingTime、AmericanMap、HelloChina等。extends(继承)extends保留字用来表明新创建的类继承哪个类,被继承的类称为此类的父类。extends后面只能跟一个父类名。implements(实现):用来表明这个类实现了哪些接口,接口名可以有多个。,23,类体,类体中定义了该类所有的成员变量和该类所支持的方法其格式说明如下:成员变量的声明构造方法的声明与实现成员方法的声明及实现说明:1)类体的数据声明为成员变量,针对数据的操作声明为成员方法,数据的操作过程在成员方法的实现中体现。2)构造方法主要用于类对象的实例化,又称构造器。3)类体中声明的成员变量和方法的排列顺序可以任意。,24,例如:矩形应该包含的属性有长、宽,应该具备的行为能力有设置长、宽的当前值,获取长、宽的当前值,计算矩形的面积与计算矩形的周长等。,25,/filename:Rectangle.javapublicclassRectangle/矩形类privateintlength;/表示长privateintwidth;/表示宽publicvoidsetLength(intlengthValue)length=lengthValue;publicvoidsetWidth(intwidthValue)width=widthValue;publicintgetLength()returnlength;publicintgetWidth()returnwidth;publicintgetArea()returnlength*width;publicintgetPerimeter()return2*(length+width);,26,UML始于1997年,是一种面向对象建模的图形表示法。利用它可以从不同侧面描述所开发的软件系统的特征,为构造更加符合用户需求、更加可靠、更加安全、更加易于扩展的软件系统奠定了良好的基础。“类图”是UML中用来描述类及类之间静态关系的图。,27,例:定义一个日期类DatepublicclassDate/日期类privateintyear;/表示年privateintmonth;/表示月priavteintday;/表示日publicvoidsetYear(inty)year=y;publicvoidsetMonth(intm)month=m;publicvoidsetDay(intd)day=d;publicvoidsetDate(inty,intm,intd)year=y;month=m;day=d;publicintgetYear()returnyear;publicintgetMonth()returnmonth;publicintgetDay()returnday;,28,例:定义一个学生类publicclassStudent/学生类privatelongNo;/表示学号privateStringname;/表示姓名privatecharsex;/表示性别privateDatebirthday;/表示出生日期publicvoidsetNo(longn)No=n;publicvoidsetName(Stringn)name=n;publicvoidsetSex(chars)sex=s;publicvoidsetBirthday(Dateb)birthday=b;publiclonggetNo()returnNo;publicStringgetName()returnname;publicchargetSex()returnsex;publicDategetBirthday()returnbirthday;,29,4.1.2类中的成员变量(P57),每个对象的状态通过属性体现。在程序中,对对象的操作主要是指更改对象属性的状态值和获取对象属性的当前状态值。Java语言的成员变量有两种形式(P82)一种是静态(static)的,被称为静态变量;另一种是非静态的,被称为实例变量。,30,实例变量的显著特点:一个对象一个副本,即同一个类的不同对象有相同的属性项目,但各自拥有独立的副本,进而导致在同一时刻,不同对象可以拥有不同的状态值。定义成员变量的格式为:修饰符staticfinal数据类型成员变量名1,成员变量名2,说明:(1)修饰符的作用是限定成员变量的可访问权限,主要有public(公共的)、protected(受保护的)、private(私有的)以及缺省等四种情况(2)static用于声明类成员变量,用于保存与整个类有关的状态数据的成员变量称为静态成员变量或者类成员变量,简称为类变量,final用于声明常量;(3)成员变量的数据类型既可以是基本数据类型,也可以是引用数据类型,如数组或者其他类对象等。,31,1成员变量的类型:成员变量和局部变量的类型可以是Java中的任何一种数据类型,包括基本类型:整型、浮点型、字符型;引用类型:数组、对象和接口。P582成员变量的有效范围:成员变量在整个类内都有效,局部变量只在声明它的方法内有效。方法参数在整个方法内有效,方法内的局部变量从声明它的位置之后开始有效。P583实例变量与静态变量:在声明成员变量时,用关键字static给予修饰的称作静态变量,否则称作实例变量(类变量也称为static变量,静态变量)。P59,P824成员变量的隐藏:如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,即这个成员变量在这个方法内暂时失效。P595编程风格P59(1)一行只声明一个变量。(2)变量的名字符合标识符规定。(3)变量名字见名知意,避免容易混淆的变量名字。,/变量的类型p58,classPeopleintboy;floata;voidf()booleancool;WorkmanzhangBoy;classStudentdoublex;,32,/变量的有效范围p57publicclassAvoidf()intm=10,sum=0;/成员变量,在整个类中有效if(m9)intz=10;/仅在复合语句内有效z=2*m+z;for(inti=0,im;i+)/i仅在循环内有效sum=sum+i;m=sum;/合法z=i+sum;/非法,33,/实例变量与类变量p58classfloatx;staticinty;,34,/成员变量的隐藏p58classTomintx=98,y;voidf()intx=3;y=x;class三角形floatsideA,sideB,sideC,lengthSum;voidsetSide(floatsideA,floatsideB,floatsideC)this.sideA=sideA;this.sideB=sideB;this.sideC=sideC;,35,36,5个初始化实例变量的途径:(1)Java为每种数据类型的实例变量提供了默认的初始值。(2)如果希望将实例变量初始化为其他值,可以在定义的同时赋予相应的初始值。(3)在某个成员方法中,为实例变量赋值。(4)在类的构造方法中实现初始化实例变量的操作,这是提倡使用的初始化方式。(5)利用初始化块对成员变量进行初始化。,37,例:定义圆形类,并通过方法给实例变量赋值publicclassCircle/圆形类privatePointcentre;/表示圆心坐标privatefloatradius;/表示圆的半径/初始化块centre=newPoint(50,50);radius=10.0f;publicvoidsetCentre(Pointp)centre=p;publicvoidsetRadius(floatr)radius=r;publicPointgetCentre()returncentre;publicfloatgetRadius()returnradius;publicfloatarea()returnradius*radius*3.14159f;/其他的成员方法;,38,4.1.3类中的成员方法,类中的成员方法主要承担对象的外部接口任务。在类中,至少包含对类中的每个成员变量设置状态值,获取成员变量的当前状态值等一系列成员方法。面向对象程序设计方法反复强调:在设计类时,应该将描述对象属性的成员变量隐藏起来,用实现操作行为的成员方法作为对象之间相互操作的外部接口。因此,设计一套合理的成员方法,对于该类对象的可操作性至关重要。成员方法是可被调用执行并返回值的、能实现特定功能的程序段。,39,1.方法的定义(P60),方法的定义包括两部分:方法声明和方法体。Java语言规定,方法的定义格式为:成员方法声明格式如下:修饰符abstractstaticfinal返回值类型方法名(参数列表)throws异常类方法体说明:(1)方法的修饰符和成员变量的修饰符一样有四种情况;(2)abstract、static和final分别用于指定所声明的方法为抽象方法、静态方法和最终方法。(3)静态方法又称静态成员方法或类方法,一般用于与类有关的数据操作,可以使用类名直接调用。,40,(4)成员方法执行数据操作功能后都会向调用者返回数据操作的结果,返回值类型就是用于声明该成员方法返回值结果的数据类型,可以是包括基本数据类型和引用类型在内任何合法的类型。(5)若成员方法不返回任何值,则返回值类型用void标记,不能缺省。(6)每个成员方法都有一个方法名,紧邻方法名的是用一对括号()括起来的参数列表,参数列表也称为形式参数表,简称形参表。(7)形参表:主要用于声明该成员方法在被调用时需要调用者提供的、与数据操作相关的参数的个数与数据类型。每个成员方法允许声明的形参可以有0到多个,每个形参由形参数据类型、空格符和形参名组成,多个形参之间用逗号分隔,即便成员方法没有形参,括号()也不能缺省。,41,(8)形参的作用域是局部的,只限于声明它的成员方法之内有效。throws用于声明该成员方法在执行过程中可能会抛出的异常类型。(9)花括号所括起来的就是方法体,方法体可以包含一到多条语句,用以实现成员方法所负责的数据操作功能。若成员方法的返回值类型不为void,则在方法体中需要使用return语句返回其数据操作的结果,且结果类型必须与方法声明的返回值类型相一致。(10)在方法体内可以局部变量,其作用域只限于声明它的方法体内,且声明中不能使用public等访问修饰符和static关键字,同时需遵循“先赋值,后使用”的原则,且在同一个类的不同方法中可以声明同名的局部变量,包括形式参数在内的所有局部变量都不能在方法体外被访问。,42,例:publicclassTime/时间类privateinthour;/表示小时privateintminute;/表示分钟privateintsecond;/表示秒publicvoidsetTime(inth,intm,ints)hour=(h0)?0:h%24;minute=(m0)?0:m%60;second=(sP63一个类中的方法可以互相调用,实例方法可以调用该类中的其它方法;类中的类方法只能调用该类的类方法,不能调用实例方法。P64,(1)p62classAinta=12;floatb=12.56f;classAinta;floatb;a=12;b=12.56f;,44,classAinta;floatb;voidf()intx,y;x=34;y=-23;a=12;b=12.56f;,classAinta;staticintb;voidf(intx,inty)a=x;/合法b=y;/非法staticvoidg(intx)b=23;/合法a=z;/非法,45,classAfloata,b;voidsum(floatx,floaty)/实例方法a=max(x,y);/合法b=min(x,y);/合法system.out.print(a+b);staticfloatgetMaxSquare(floatx,floaty)/类方法returnmax(x,y)*max(x,y);/合法staticfloatgetMinSquare(floatx,floaty)/类方法returnmin(x,y)*min(x,y);/非法staticfloatmax(floatx,floaty)/类方法returnab?a:b;floatmin(floatx,floaty)/实例方法returnab?a:b;,46,47,实例方法和类方法的区别(P84),当用类创建对象后,类中的实例方法才分配入口地址,从而实例方法可以被类创建的任何对象调用执行。对于类中的类方法,在该类被加载到内存时,就分配了相应的入口地址。,48,/4.2.7类方法与实例方法p62classAinta;floatmax(floatx,floaty)/实例方法.staticfloatjerry()/类方法.staticvoidspeak(Strings)/类方法.,49,2.成员方法的重载(P61),所谓成员方法的重载是指在一个类中,同一个名称的成员方法被多次定义的现象。但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。为了支持成员方法的重载,Java规定:具体调用哪个成员方法将由方法名与参数列表共同决定,且称此为成员方法的签名。即在Java语言中,每个成员方法是由方法签名惟一标识的。因此,在同一个作用域中,不能够出现两个签名完全一样的成员方法,否则将产生编译错误。,50,例:方法重载publicclassTime/时间类privateinthour;/表示小时privateintminute;/表示分钟privateintsecond;/表示秒publicvoidsetTime(inth,intm,ints)/参数为3个int类型hour=(h0)?0:h%24;minute=(m0)?0:m%60;second=(s0)?0:s%60;publicvoidsetTime(Stringtime)/参数为String类对象hour=Integer.parseInt(time.substring(0,1);hour=(hour0)?0:hour%24;minute=Integer.parseInt(time.substring(3,4);minute=(minuteP65,创建对象时,一般先定义一个对象变量,再用new运算符实例化一个对象Java规定,对象的定义、创建与初始化几个阶段,既可以分别实现,也可以合并在一起实现。创建一个对象包括对象的声明、为对象分配内在空间和赋初值3个步骤1.对象声明格式类名对象名;/声明对象变量例:DatedateObject;,63,2.为对象分配空间(P65)使用new运算符和相应的构造方法为声明的对象分配内存,并实例化一个对象。如果类中没有定义构造方法,系统为调用默认的构造方法。默认的构造方法是无参数的。创建对象的语法格式为:对象名=new类名(实参列表);/实例化对象例:dateObject=newDate();,64,其中,“类名”是对象所属的类名称,“参数列表”是创建对象时提供的参数,其格式取决于类定义时提供的构造方法的参数列表。例如,timeObject1=newTime(10,20,30);timeObject2=newTime(08:25:15);,65,new运算符主要完成了下面两项工作:为对象分配存储空间。根据提供的参数格式调用与之匹配的构造方法,实现初始化成员变量的操作,然后返回本对象的引用。TimetimeObject3=newTime(14:50:24);TimetimeObject4=newTime(09,20,45);new可以实例化类的多个不同的对象,分配不同的内存。因此,这些对象之间的状态相互独立。,classPointintx,y;Point(inta,intb)x=a;y=b;publicclassExample4_2publicstaticvoidmain(Stringargs)Pointpoint1,point2;/声明对象point1和point2point1=newPoint(10,10);/为对象分配内存,使用new和类中的构造方法point2=newPoint(23,35);/为对象分配内存,使用new和类中的构造方法,66,例4.2P65,67,4.2.2对象成员的引用(P67),对象创建后,可以通过引用不同对象的成员变量,或调用不同对象的成员方法达到对象间相互驱动的程序运行效果。Java语言规定,引用对象的成员变量及调用对象的成员方法的语法格式为:对象名.成员变量对象名.成员方法(参数列表),68,对象方法的调用,说明:对象名与成员变量或方法之间使用点运算符“.”分隔。方法调用时给出的参数称为实际参数,简称实参。实参可以是常量、变量、表达式或方法的调用,实参的个数与数据类型及排列次序一定要与类定义中该方法声明的形参保持一致,且多个实参之间用逗号分隔。当调用方法时,系统按照实参与形参一一对应的关系将实参的值或引用传递给对应的形参。需要特别注意的是,若实参为引用类型的数据,其值不能为null。方法后的圆括号()是必需的,即便该方法没有声明形式参数也不能缺省。,69,对象的引用和实体,当用类创建一个对象时,类中的成员变量在堆分配内存空间,这些内存空间称作该对象的实体或对象的变量,而对象中存放着引用。一个类创建的两个对象,如果具有相同的引用,那么就具有完全相同的实体。,70,对象数组,Java语言中的数组属于引用数据类型,而数组元素既可以是基本数据类型,也可以是引用数据类型。若数组元素为引用数据类型,如字符串、数组或类对象,则称该数组为对象数组。对象数组是Java语言用于保存多个同类对象引用的主要手段,其定义格式与普通数组类似,只是用对象类名替代数据类型即可。对象数组的初始化也需要使用new运算符获得数组元素的存储空间,用于存放数组元素(对象)的引用,对于每一个数组元素还需要使用new运算符实现对象的实例化。,71,对象数组,例如:Daterdates=newDate3/定义并初始化对象数组Dates0=newC_Date();/数组元素(对象)的实例化Dates1=newC_Date(1949,10,1);Dates2=newC_Date(2009,11,20);以上的操作所产生的对象数组的引用模型结构如图示。,72,例:设计一个Java程序,其功能为:随机产生某个班级、某门课程的考试成绩,然后按照考试分数从高到低的顺序重新排列,并显示输出。为了解决这个问题,需要设计两个类。一个是考试成绩类ScoreClass;另一个是测试类TestScoreClass。,73,/filename:ScoreClass.javapublicclassScoreClassprivateintNo;/学号privateintscore;/成绩publicScoreClass()No=1000;score=0;publicScoreClass(intn,ints)No=n;score=s;publicvoidsetInfo(intn,ints)No=n;score=s;publicintgetNo()returnNo;/获取学号publicintgetScore()returnscore;/获取成绩publicStringtoString()returnNo+t+score;publicbooleanequals(Objectobj)/覆盖Object中的成员方法if(this=obj)returntrue;if(obj=null)returnfalse;if(getClass()!=obj.getClass()returnfalse;ScoreClassother=(ScoreClass)obj;if(other.No=No,74,4.2.3对象的清除,清除对象的主要任务是回收对象占用的所有资源,其中最主要的是空间资源。Java语言提供了“自动回收垃圾”的机制。“自动回收垃圾”具体操作的过程是:在Java运行环境中,有一个用软件实现的“垃圾回收器”。当一个对象正在处于被引用状态时,Java运行系统会将其对应的存储空间做一个标记;当结束对象引用时,自动取消这个标记。Java“垃圾回收器”周期性地扫描程序中所有对象的引用标记,没有标记的对象就被列入清除队列中。待系统空闲或需要存储空间时将其资源回收。,4.4方法的调用与参数传递(P70),方法调用的格式在方法中使用return提前返回方法调用的过程分析,方法调用时给出的参数称为实际参数,简称实参。实参可以是常量、变量、表达式或方法的调用,实参的个数与数据类型及排列次序一定要与类定义中该方法声明的形参保持一致,且多个实参之间用逗号分隔。当调用方法时,系统按照实参与形参一一对应的关系将实参的值或引用传递给对应的形参。,75,两种内存,堆内存和栈内存intx;x=newint100;x=null;的内存状态变化情况,76,java中堆和栈的区别(P69),1.栈的特点是:容量小速度快适合存放小型数据如基本数据类型和对象类型的引用在栈中变量直接指向存放变量值的空间,对于对象引用则存放对象在堆中的内存地址2.堆的特点和栈相反:因此适合存放对象本身3.对象引用访问对象的原理是:先通过该引用找到栈中的数据,即对象的地址,再通过该地址访问对象,这就是为什么对象a=null;调用a.方法(属性)会引发异常因为找不到实际对象的地址,77,返回,78,方法调用时的参数传值,当方法被调用时,如果方法有参数,参数必须要实例化,即参数变量必须有具体的值。publicclassDate1/类声明intyear,month,day;/成员变量,表示年、月、日voidsetDate(inty,intm,intd)/成员方法,设置日期值/无返回值,有3个参数year=y;month=m;day=d;publicstaticvoidmain(Stringargs)Date1aday=newDate1();/创建对象aday.setDate(2006,1,28);/调用类的成员方法,79,1基本数据类型参数的传值(P70),基本数据类型的参数,向该参数传递的值的级别不可以高于该参数的级别,比如,不可以向int类型参数传递一个float值,但可以向double类型参数传递一个float值。这种数据传递方式被称为是值传递,方法接收参数的值,但不能改变这些参数的值。例4.4P71,方法的参数传递基本数据类型的参数传递,classPassValuepublicstaticvoidmain(Stringargs)intx=5;change(x);System.out.println(x);publicstaticvoidchange(intx)x=3;,80,方法的参数传递基本数据类型的参数传递,81,82,2引用类型参数的传值(P71),引用传值方式:Java的引用类型数据包括对象、数组和接口,当方法中参数是引用类型时,引用数据类型传递给方法的是数据在内存中的地址,方法中对参数变量的操作可以改变原变量的值。,方法的参数传递引用数据类型的参数传递,classPassRefintx;publicstaticvoidmain(Stringargs)PassRefobj=newPassRef();obj.x=5;change(obj);System.out.println(obj.x);publicstaticvoidchange(PassRefobj)obj.x=3;,83,方法的参数传递引用数据类型的参数传递,84,方法的参数传递引用数据类型的参数传递,85,方法的参数传递引用数据类型的参数传递,86,方法的参数传递引用数据类型的参数传递,87,classPassRefintx;publicstaticvoidmain(Stringargs)intx=newint1;x0=5;change(x);System.out.println(x0);publicstaticvoidchange(intx)x0=3;,88,89,classPeopleStringface;voidsetFace(Strings)face=s;classCvoidf(intx,doubley,Peoplep)x=x+1;y=y+1;p.setFace(笑脸);System.out.println(参数x和y的值分别是:+x+,+y);System.out.println(参数对象p的face是:+p.face);publicclassEp3_8publicstaticvoidmain(Stringargs)intm=100;doublen=100.88;Peoplezhang=newPeople();zhang.setFace(很严肃的样子);Ca=newC();a.f(m,n,zhang);System.out.println(main方法中m和n的值仍然分别是:+m+,+n);System.out.println(main方法中对象zhang的face是:+zhang.face);,zhang.face=很严肃的样子;,zhang.face=“笑脸;,参数x和y的值分别是:101,101.88参数对象p的face是:笑脸main方法中m和n的值仍然分别是:100,100.88main方法中对象zhang的face是:笑脸,例4.5P73,返回,90,this关键字(P85),this是Java的一个关键字,表示某个对象。this可以出现在实例方法和构造方法中,但不可以出现在类方法中。this关键字出现在类的构造方法中时,代表使用该构造方法所创建的对象。实例方法必须通过对象来调用,当this关键字出现在类的实例方法中时,代表正在调用该方法的当前对象。成员函数中定义了和成员变量中相同的变量时,引用成员变量要用this.构造函数中调用同一个类的其他构造函数时用this。,91,【例】编写两个重载构造函数的类,在第二个构造函数中使用this调用第一个构造函数。,publicclassThisConstructorCallpublicThisConstructorCall(Strings)System.out.println(s=+s);publicThisConstructorCall(inti)this(i=+i);publicstaticvoidmain(Stringargs)ThisConstructorCallt=newThisConstructorCall(Stringcall);ThisConstructorCallct=newThisConstructorCall(47);,s=Stringcalls=i=47,例4.10P85,92,this关键字的示例,classPixelintx;inty;voidinit(intx,inty)this.x=x;this.y=y;publicstaticvoidmain(Stringargs)Pixelp=newPixel();p.init(4,3);,习题4.8P107,93,4.3访问特性控制(P94),Java语言是通过访问特性控制符来实现隐藏数据,开放对外接口目的的。在Java语言中,提供了4种访问特性控制符。它们分别是:默认访问特性public(公有)访问特性private(私有)访问特性protected(保护)访问特性。,94,在指定访问特性修饰符时需要注意:如果没有指定任何访问特性修饰符,则为默认访问特性。protected和private只能应用于内部类,不能应用于顶层类。有关内部类的相关内容将在稍后介绍。在定义类、接口、成员变量和成员方法时,不允许出现多个访问特性修饰符,否则属于编译错误,在编译时会给出错误提示。,95,1.默认访问特性,如果在定义类、接口、成员变量与成员方法时没有指定访问特性修饰符,它们的访问特性就为默认访问特性。具有默认访问特性的类、接口、成员变量与成员方法,只能被本类和同一个包中的其他类、接口及成员方法引用。因此,有人又将默认访问特性称为包访问特性,它可以阻止其他包的任何类、接口或成员方法的引用。,96,2.public访问特性,拥有public访问特性的类、接口、成员变量、成员方法可以被本类和其他任何类及成员方法引用。它们既可以位于同一个包中,也可以位于不同包中。public访问特性最具有开放性。通常,应该将公共类,或者作为公共接口的成员方法指定为这种访问特性,建议不要将成员变量指定为public访问特性,否则将会破坏数据的隐藏性。,97,3.private访问特性,将类中的数据成员指定为private访问特性是实现数据隐藏机制的最佳方式。private访问特性可以应用于类成员,包括成员变量、成员方法、内部类和内部接口。具有private访问特性的成员只能被本类直接引用。,98,/filename:CardClass.javapublicclassCardClass/名片类privateStringname;/姓名privateStringappellation;/称呼privateStringdepartment;/工作单位privateStringtel;/电话号码privateStringhandset;/手机号码privateStringemail;/电子邮箱publicCardClass()publicCardClass(Stringn,Stringa,Stringd,Stringt,Stringh,Stringe).publicvoidsetInfo(Stringn,Stringa,Stringd,Stringt,Stringh,Stringe).publicStringgetName()returnname;/返回姓名publicStringgetAppellation()returnappellation;/返回称呼publicStringgetDepartment()returndepartment;/返回部门publicStringgetTel()returntel;/返回电话publicStringgetHandset()returnhandset;/返回手机号码publicStringgetEmail()returnemail;/返回电子邮箱publicStringtoString().,99,/filename:TestCardClass.javapublicclassTestCardClasspublicstaticvoidmain(Stringargs)CardClasscard=newCardClass(王军,先生,软件开发公司,800900wangjun);System.out.println(-);System.out.println(card);System.out.println(-);,100,4.protected访问特性,具有protected访问特性的类成员可以被本类、本包中的其他类和其他包中的子类访问。它的可访问性介于默认与public之间。如果希望只对本包及其他包中的子类开放,就应该选择这个protected访问特性。,101,习题4.7P105,102,4.5类的静态成员(P82),与C+语言类似,Java语言也提供了两种形式的成员:一种是静态,被称为静态成员,主要包括静态成员变量与静态成员方法;另一种是非静态,被称为实例成员,主要包括实例变量与实例方法。,103,4.5.1静态成员变量(P82),在类中定义成员变量时,如果在访问特性修饰符之后加上static修饰符就成为静态成员变量。例如publicstaticintstaticMember;静态成员变量只在加载类时创建一个副本,无论未来创建同一个类的多少个对象都将共享同一个副本,因此,静态成员变量与类共存亡,而与具体的对象无关,因此,很多人将其称为类变量。例4.8P83,104,/filename:Employee.javap

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论