第五章 对象及类_第1页
第五章 对象及类_第2页
第五章 对象及类_第3页
第五章 对象及类_第4页
第五章 对象及类_第5页
已阅读5页,还剩29页未读, 继续免费阅读

下载本文档

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

文档简介

第五章对象及类对象与类对象生命周期类的创建重载子类1对象的基本概念面向对象程序语言三个关键特点:封装(Encapsulation)多态(Polymorphism)继承(Inheritance)2基本数据类型和聚集类型的变量与一些操作(如+,-)之间不需特殊的联系。在面向对象语言中,在数据类型的声明与操作这些数据的代码声明之间建立紧密联系,这种联系通常描述为一种抽象数据类型。在Java中,抽象数据类型的概念用类来实现。

抽象数据类型3类和对象类是特定类型对象的定义,包括:对象包含的数据,对象的创建及对象对自身数据操作的方法。类是一个模板。对象是在其类模型基础上构造出的,是具体的实例。4类和对象举例类定义:ClassEmpInfo{ Stringname; Stringdesignation; Stringdepartment; voidprint(){System.out.println(name+“is”+ designation+“at”+department);} }对象的生成与使用:…

EmpInfoemployee=newEmpInfo(); =“RobertJavaman”; employee.designation=“Manager”; employee.department=“Coffeeshop”; employee.print();...5创建对象例:Pointorigin_one;origin_one=newPoint(23,94);Rectanglerect_one=newRectangle(origin_one,100,200);Rectanglerect_two=newRectangle(50,100);创建对象的三个步骤:

声明(Declaration)

实例化(Instantiation)

初始化(Initialization)6对象的实例化使用new操作符进行对象的实例化,为对象分配空间,并返回指向该对象的引用。格式:new对象所属类的构造函数

类的构造函数负责对新创建的对象进行初始化7对象实例化过程构造与初始化对象的过程(调用newXxxx()):

开辟内存空间及类成员变量的初始化: 数值型:0;布尔型:false;

引用型:null;字符串型:null;

显式初始化:执行类成员声明时带有的简单赋值表达式。

publicclassInitialized{ privateintx=5; privateStringname=“Fred”; … }

执行构造函数。8对象的回收垃圾收集机制(garbagecollection):Java运行环境当确定某个对象不再被使用时,将其删除。一个对象在没有引用指向它时,可作为垃圾收集。垃圾搜集器:Java运行环境中的垃圾搜集器周期性地释放 不用对象占用的空间。9垃圾收集机制C++:A*a=newA(); A*b=a; A*c=a;Java:Aa=newA(); Ab=a; Ac=a;ab

c

b

c(指针悬空)ab

c

b

c//a使用完,将其删除

deletea;//a使用完,将其删除

a=null;10类的创建

11构造方法定义:public

类名(参数){…}注意:方法名必须与类名相同。不能带返回类型。类的构造函数12如果在类定义中无构造函数,Java在编译时可缺省加入构造方法。如publicEmployee(){};一旦在类中有一个自己声明的构造函数,则缺省的构造函数将不被加到源程序中。缺省构造函数13类成员方法定义一般格式:<modifiers><return_type><name>([<argument_list>])[throws<exception>]{<block>}

方法是传值的,方法调用不会改变参数的值。当对象作为参数时,参数的值是该对象的引用,这时对象的内容可以在方法中改变,但是对象的引用不会改变。14举例PublicclassPassTest{ floatptValue; publicvoidchangeInt(intvalue){ value=55;} publicvoidchangeStr(Stringvalue){ value=newString(“different”);} publicvoidchangeObjValue(PassTestref){ ref.ptValue=99.0f;} publicstaticvoidmain(Stringargs[]){ Stringstr; intval;

PassTestpt=newPassTest();

val=11; pt.changeInt(val); System.out.println(“Intvalueis:”+val);

str=newString(“hello”); pt.changeStr(str); System.out.println(“strvalueis:”+str); pt.ptvalue=101.0f; pt.changeObjValue(pt); System.out.println(“ptvalueis:”+pt.ptValue); }} 结果:

IntValueis:11StrValueis:helloptvalueis:99.0f15数据隐藏与封装数据隐藏:使用private定义的成员变量,只能在成员方法中使用,其它方法中禁止使用。优点:保证对象中数据的一致性。封装:基本数据和对数据进行的操作方法的结合。

优点:隐藏类中具体实现的细节。强迫程序员使用统一的接口访问数据。使代码可维护性好。16数据隐藏与封装举例ClassDate{ privateintday,month,year; voidsetDate(inta,intb,intc){ day=a; month=b; year=c; } }…Dated1;d1.newDate();d1.setDate(30,9,2001);...d1.day=30;(错误!)17“this“引用关键字this用来指向当前对象本身。例:classDate{ privateintday,month,year; publicDategetTommorrow(){ this.day++; … }18重载(Overloading)含义:在同一个类中一个方法名被用来定义多个方法。

classScreen{ publicvoidprint(inti){…} publicvoidprint(floati){…} publicvoidprint(Stringstr){…} }重载必须遵守原则:参数表必须不同,以此区分不同方法体。返回类型、修饰符可相同或不相同。19激活重载的构造函数在一个构造函数中可以利用另一个构造函数。classEmployee{ privateStringname; privateintsalary; publicEmployee(Stringn,ints){ name=n; salary=s; } publicEmployee(Stringn){this(n,0);} publicEmployee(){this(“Unknown”);} }20子类子类表示类之间一种“属于”(

isa)关系。例:publicclassEmployee{ Stringname; DatehireDate; DatedateofBirth; StringjobTitle; intgrade; … }publicclassManager{ Stringname; DatehireDate; DatedateofBirth; StringjobTitle; intgrade;

Stringdepartment;

Employee[]subordinates; … }21

Java中用extends关键字定义子类。Extends关键字publicclassEmployee{ Stringname; DatehireDate; DatedateofBirth; StringjobTitle; intgrade; … }publicclassManagerextendsEmployee

{

Stringdepartment;

Employee[]subordinates; }子类是从已有的类创建新类的一种方法。22子类子类继承父类的属性、功能(方法),子类中只需声明特有的东西。带private修饰符的属性、方法是不能被继承的。构造函数不能被继承。在方法中调用构造方法用this()。调用父类的构造方法用super()。 --super指向该关键字所在类的父类。23构造不同类型数据的集合

Java中允许构造如下类型的数组:

Employee[]staff=newEmployee[1024]; staff[0]=newManager(); staff[1]=newWorker(); staff[2]=newEmployee(); …----staff是由多种类型的对象组成的。

Java中任何一个子类的实例都可作为父类的实例使用,可以调用父类具有的方法。24单继承

Java是单继承的,即只能从一个类继承,

extends后类名只能有一个。单继承的优点:代码更可靠可以用接口弥补

用一个类实现多个接口,达到多继承效果。25多态Java允许父类对象的变量作为子类对象的变量使用。但通过该变量(如e)只能访问父类的方法,子类特有的部分被隐藏。如:Employeee=newManager();多态含义:

Anobjecthasonlyoneform,whileavariableispolymorphism,sinceitcanrefertoobjectsofdifferentforms,polymorphismistheabilitytohavemanydifferentforms.26Super关键字Super指向该关键字所在类的父类。PublicclassEmpolyee{ privateStringname; privateintsalary; publicStringgetDetails(){ return“Name:”+name+“\nSalary:”+salary; } }publicclassManagerextendsEmpolyee{ privateStringdepartment; publicStringgetDetails(){ returnsuper.getDetailes()+‘\nDepartment:“+ department; } }27“instanceof”及类型强制转换

Instanceof

测试对象类型

Empolyeea=newManager();

则

ainstanceofManager为true;类型转换父类弱、子类强,指向父类的引用不能直接按子类引用,必须要强制类型转换后才能作为子类的引用使用。例:publicvoidmethod(Employeee){ if(einstanceofManager){ managerm=(manager)e; m.department=“…”; … }}28重写(Overridingmethods)子类可以改变从父类继承的行为。被重写方法的返回值、方法名、参数列表要与父类中的方法完全一样。运行时确定使用父类还是子类的方法。

Employeee=newManager();e.getDetails();29Overriding示例publicclassStack{privateVectoritems;//codeforStack'smethodsandconstructornotshown//overridesObject'stoStringmethod

publicStringtoString(){intn=items.size();StringBufferresult=newStringBuffer();result.

温馨提示

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

评论

0/150

提交评论