第4章 Java面向对象编程基础.ppt_第1页
第4章 Java面向对象编程基础.ppt_第2页
第4章 Java面向对象编程基础.ppt_第3页
第4章 Java面向对象编程基础.ppt_第4页
第4章 Java面向对象编程基础.ppt_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

1,第4章Java面向对象编程基础,2,教学内容,3,教学内容,4,教学目标,了解并熟悉面向对象的基本概念。掌握什么是类,以及如何定义类。掌握构造方法的定义、作用,以及如何实现类的构造方法。掌握如何创建类对象、如何使用类对象。掌握静态成员和实例成员的使用方法,以及二者之间的区别。掌握类成员的访问权限的设置方法,以及使用的原则。,5,教学重点,本章首先介绍面向对象的一些基本概念,让读者初步了解面向对象基本概念接着详细讲解在Java中类的含义、如何定义类、如何由类定义对象以及二者的关系然后讲解对象的使用方法、静态成员、实例成员、成员权限的设置等内容。本章将通过一个实例涵盖本章的各个知识点,让读者由浅入深、由少到多、逐步深入与扩充最终形成一个完整的案例,帮助读者理解和运用本章知识点。,6,类和对象:类是一类对象的抽象或原形,它定义了该类对象的共同的属性和方法。真实世界中每个看得见的东西都是对象用户可以使用类的定义来生成该类的对象,生成的对象将可以使用该类的所以组件。属性与方法:(1)属性成员(field)域:是存储数据项的变量。成员域也称类的数据成员(datamember)。“属性”是对象的静态描述。(2)方法(method):定义了用户可以进行的操作,也决定了利用类的对象可以做的事情。“方法”则是对象的动态描述,或解释为操作对象的方式。,4.1面向对象的基本概念,7,例如:如何描述“银行账户”这个对象呢?将它分为属性与方法两个方面考虑,与“银行账户”对象相关的静态属性主要有银行账号、户名、密码、账户余额等而与“银行账户”相关的动态方法有存款、取款、查询余额、更改密码等。事实上对象本来就应该只是一个抽象的轮廓,因为必须依问题的不同来描述不同的对象,而不是详细地将一个对象描述出来。,4.1面向对象的基本概念,8,用来描述继承最简单的一句话就是“保留、修改与新增”。在继承关系下,原来的对象称作父类对象,而新对象称作子类对象,父类和子类之间具有“相同种类”的关系。,对象的继承,9,一是当用户在创造新对象时,应该以继承现有对象为前提,而不是绞尽脑汁再去创造另一个全新的对象;另一方面是应该尽量以现成的对象来建构程序例如假使定义了一个“人”对象,那么当定义“导游”对象时应该以继承“人”对象为出发点,然后进一步去做“保留、修改和新增”的工作,就可在所有需要导游对象的程序中重复使用最佳例子,就是Java所提供的各种API,这些API中的类间可相互继承,并不断派生新增功能,对象的重用,10,就是将对象的属性和方法作适当程度的“包装”,只留下操作的接口封装也可以说成是一种“信息隐藏”(informationhiding)。封装的最大好处就是会使对象容易使用,用户无须去关心其内部的细节。例如,“录音机”是一个对象,无论其内部构造有多复杂,用户总是由各种“录音键”、“播放键”、“停止键”等按键来操作录音机。,对象的封装,11,是指在一般类中定义的属性或服务被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或服务在一般类及其各个特殊类中具有不同的语义。例如:“几何图形”的“绘图”方法,“椭圆”和“多边形”都是“几何图形”的子类,但其“绘图”方法功能不同。,对象的多态性,12,Java中使用类的语法:存取修饰词class类名称extends单一父类implements接口1,接口2/属性;/方法;用户在指定“类名称”时必须遵守Java的命名规则。另外,在Java语言中,英文字母大小写视为不同。,4.2类的定义,13,属性成员是具有某种数据类型的变量或常量。定义属性成员的语法如下:访问权限修饰符finalstatic数据类型名称;最简单的属性成员定义如下:数据类型名称;属性成员的数据类型可分为原始数据类型和派生数据类型两大类。,属性成员的定义,14,【例4-1】定义“银行账户”类,主要包括姓名、账号、密码及账户余额四个属性成员。classCust/Cust类/定义属性成员Stringname;/字符串intID;/整型变量StringPWD;/字符串intmoney;/整型变量,属性成员的定义,15,【例4-2】修改上例定义的“银行账户”类,声明四个属性成员时直接为属性变量赋值。classCust/Cust类/声明变量并指定变量值Stringname=张三;/字符串intID=001;/整型变量/声明常数,并指定常数值/将串123456指定给字符串变量PWDfinalStringPWD=123456;/将常数50000指定给整型变量moneyfinalintmoney=50000;,属性成员的定义,16,方法成员,是数行程序代码的集合,用来操作类中的属性成员。其包括方法头和方法体两个部分。定义方法成员的语法如下:访问权限修饰符finalstaticabstract返回值数据类型名称(参数列表)throws异常类/方法主体,方法成员的定义,17,例如在前述的“银行账户”类中,需要进行取钱和存钱,可以定义方法如下:intgetMoney(intdeposit)returnmoney=money-deposit;voidsaveMoney(intdeposit)money=money+deposit;,方法成员的定义,18,方法成员,是数行程序代码的集合,用来操作类中的属性成员。其包括方法头和方法体两个部分。定义方法成员的语法如下:访问权限修饰符finalstaticabstract返回值数据类型名称(参数列表)throws异常类/方法主体,方法成员的定义,19,1.案例描述建立一个银行账户类,要求能够存放用户的账号、姓名、密码和账户余额等个人信息,并包含存款、取款、查询余额和修改账户密码等操作2.案例分析本案例创建一个银行账户类即可,属性成员包含四项:密码和账户姓名可以定义为String类型账号和账户余额可以定义为int类型方法成员,即各项操作,只需通过参数的传递,修改类中相应的属性成员即可,4.3案例分析:定义银行账户类,20,3.案例实现见Cust1.java4.归纳与提高本例中,应掌握类的定义的形式和方法。在定义类时,根据属性成员的实际含义选用恰当的类型,并提供需要的方法成员,即操作。注意类中定义的属性成员在本类中都可见,要区别其与形参的不同。形参的作用域是其所定义的方法体内而类的属性成员的作用域是整个类的范围。,4.3案例分析:定义银行账户类,21,可以把类看成一个数据类型,这种数据类型就是对象类型。对象类型和基本数据类型有着本质上的区别声明对象变量之后,必须用运算符new创建对象实体之后,才能使用对象。new关键字的作用有以下几点:(1)为对象分配内存空间。(2)调用类的构造方法。(3)为对象返回一个引用。,4.4对象的定义和引用,22,构造方法必须以类名作为方法的名称,且不返回任何值也就是说构造方法是名称为类名的特殊方法。【例4-3】定义“银行账户”类的构造方法,实现对银行账户属性变量的赋值操作。Cust(StringnewName,intnewID,StringnewPWD,intnewMoney)name=newName;ID=newID;PWD=newPWD;money=newMoney;,构造方法,23,在Java类中,最少要有一个构造方法。类的构造方法可以显式定义,也可以隐式定义。系统使用默认的构造方法来初始化对象时,将类中的变量自动初始化为该类型的默认值。整型初始化为0浮点型初始化为0.0字符型初始化为u0000逻辑型初始化为false类对象初始化为null等,构造方法,24,构造方法是一个特殊的方法,其具有以下特点:(1)构造方法的方法名称必须与类名相同。(2)构造方法没有返回类型,也不能定义为void。(3)构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。(4)构造方法不能由编程人员调用,而由系统调用。(5)一个类可以定义多个构造方法,即构造方法可以重载。但如果没有定义构造方法,则编译系统会自动插入一个无参数的默认构造方法,这个默认构造方法没有任何代码。,构造方法,25,为了在程序中使用对象,首先要声明和创建一个对象,然后给它发送消息,即调用它的方法。例如:CustmyCust;Cust=newCust(Tom,100,12345,10000);等效于CustmyCust=newCust(Tom,100,12345,10000);,对象的创建,26,对象的创建,CustmyCust;,myCust=newCust(Tom,100,12345,10000);,0 x0012ff70,myCust,27,类、引用和对象之间的关系如图4-3所示。,对象的创建,28,在类的作用域中,一个类中声明的成员变量和方法可由类中的所有方法访问,并可用它的名称进行引用。在类的作用域外部,类中声明的成员变量和方法的存取必须通过该类或该类的对象和点操作符(称为类成员存取操作符)来存取在类的外部调用成员变量和成员方法的语法分别为:对象名.成员变量名;对象名.方法名(形参列表);例如:CustmyCust=newCust(Tom,100,11111,10000);myCust.setMoney(5000);,对象的使用,29,Java提供了资源回收机制,自动销毁无用的对象,收回其所占用的空间。如果需要主动释放对象,或在释放对象时需要执行特定的操作,在类中可以定义finalize()方法finalize()方法没有参数,也没有返回值。一个类只能有一个finalize()方法,其基本的形式如下:protectedvoidfinalize()方法体;,对象的销毁,30,主方法,包含主方法的类称为主类,主类是程序执行的入口点。在一个.java文件中,可以定义多个类,但只能有一个主类。【例4-4】定义一个WelcomeDemo类,并输出“欢迎来到Java的世界”。classWelcomeDemo/主方法publicstaticvoidmain(Stringargs)System.out.println(欢迎来到Java的世界.);,main()方法,31,【例4-5】定义一个ArgsDemo类,并可将向main()方法传递的数据值依次输出。publicclassArgsDemopublicstaticvoidmain(Stringargs)for(inti=0;iargs.length;i+)System.out.print(argsi);在命令提示符下javacArgsDemo.javajavaArgsDemoabc输出结果:abc,main()方法,32,1.案例描述建立一个银行账户类,要求能够存放用户的账号、姓名、密码和账户余额等个人信息,并包含存款、取款、查询余额和修改账户密码等操作,并用此类创建对象,对象的账号为100,姓名为Tom,密码为11111,账户余额为10000。2.案例分析建立银行账户类Cust之后,通过new操作符调用类的构造方法,将各项属性成员信息传给对象,并在主函数中调用类的方法成员。3.案例实现见Cust2.java,4.5案例分析:银行账户对象的创建,33,Java的类中可以包含两种成员,实例成员和静态成员。一般在类里定义的成员是每个由此类产生的对象都拥有的,因此可以称之为实例成员或对象成员.如果需要让类的所有对象在类的范围内共享某个成员,而这个成员不属于任何由此类产生的对象,它是属于整个类的,这种成员称之为静态成员或类成员。,4.6静态成员与实例成员,34,用static修饰符的属性成员为静态属性。一个静态属性只标识一个存储位置。无论创建了多少个类实例,静态属性永远都在同一个存储位置存放其值,静态属性是被共享的,静态属性与实例属性,35,例如classCuststaticStringbankName=建设银行;intselfNum=0;staticintallNum=0;Cust(StringnewName,intnewID,StringnewPWD,intnewmoney)allNum+;selfNum=allNum;,静态属性与实例属性,36,静态方法是不向调用它的对象施加操作的方法。使用“类名.方法名”来调用静态方法在以下两种情况下使用静态方法:(1)该方法不需要访问对象的状态,其所需的参数都通过显示参数提供(如Math.pow方法)。(2)该方法只需要访问类的静态属性。,静态方法与实例方法,37,类的成员或者是静态成员,或者是实例成员。一般说来,将静态成员看作属于类,将实例成员看作属于对象(类的实例)。1静态成员的特征(1)当在E.M形式的成员访问中引用静态成员时,E必须是成员M的类型。(2)一个静态属性只标识一个存储位置。无论创建了多少个类的实例,永远都只有静态属性的一个副本。(3)静态方法不在某个特定实例上操作,在这样的方法中引用this是错误的。,静态成员与实例成员的特征,38,2实例成员的特征(1)当在E.M形式的成员访问中引用实例成员时,E是成员M的类型的实例。(2)类的每个实例分别包含一组该类的所有实例字段。类的每个实例都为每个实例字段建立一个副本。也就是说类的每个实例的实例字段的存储位置是不相同的。(3)实例方法在类的给定实例上操作,此实例可以作为this访问。静态成员与实例成员归纳如下:(1)静态方法可以访问静态成员变量,不可以访问实例成员变量。(2)实例方法可以访问静态成员变量,可以访问实例成员变量。,静态成员与实例成员的特征,【例4-6】静态方法与实例方法的区别。publicclassStaticDemostaticdoublepi=3.14;/静态变量,类变量doublepix=3.14;/实例变量,对象变量doublegetArea()/实例方法/类变量,实例方法能用类变量returnpi*3*3;staticdoublegetArea1()returnpi*3*3;/类方法能用类变量doublegetArea2()/实例方法能用实例变量returnpix*3*3;/staticdoublegetArea3()/returnpix*3*3;/类方法不能用实例变量/,【例4-7】静态成员的加法运算。classHasStaticprivatestaticintx=100;publicstaticvoidmain(Stringargs)HasStatichs1=newHasStatic();HasStatichs2=newHasStatic();hs1.x+;hs2.x+;hs1.x+;System.out.println(x=+x);程序运行结果如下:X=103,41,(1)this调用本类中的属性,也就是类中的成员变量。this.成员变量名(2)this调用本类中的其他方法。this.成员方法名(参数表)其中,成员方法名前的this可以省略。(3)this调用本类中的其它构造方法。this(参数表)(4)返回对象的值可以使用returnthis,来返回某个类的引用。,关键字this的使用,42,成员方法的重载每一成员方法都有其签名,方法的签名由方法的名称以及它的形参的数量、每个形参的类型组成。具体说来,方法签名不包含返回类型。在类中如果声明有多个同名的方法但它们的签名不同,则称为方法的重载。构造方法的重载类定义中含有两个以上其参数个数或类型不同的实例构造方法时,称为构造方法重载。产生对象的格式是如下:new类名(参数列表);,4.7方法的重载,43,例如重载Cust类的构造方法如下:Cust()name=;ID=0;PWD=;money=0;Cust(StringnewName,intnewID,StringnewPWD,intnewmoney)name=newName;ID=newID;PWD=newPWD;money=newmoney;,4.7方法的重载,44,在创建对象时,可以根据需要用不同的方式创建对象,对对象完成不同的初始化操作例如执行如下的两条语句:Custst1=newCust(Tom,100,11111,10000);Custst2=newCust();,4.7方法的重载,45,1.案例描述建立一个银行账户类,要求能够存放用户的账号、姓名、密码、账户余额、账号的流水号等个人信息,以及所在银行名称、总账户数等公共信息,功能方面要包含存款、取款、查询余额、修改账户密码等操作,要求采用不同的构造方法来构造实例对象。2.案例分析分别创建类的属性成员和方法成员,实现账户的各项操作。3.案例实现见Cust3.java,4.8案例分析:银行账户类构造方法的重载,46,类的封装类的封装性的含义是将数据和对数据的操作组合起来构成类,类是一个不可分割的独立单位。类中既要提供与外部联系的接口,同时又要尽可能隐藏类的实现细节。访问控制Java为类中的成员变量和成员方法设置了四种访问权限,为类本身设置了两种访问权限。public(公有)、protected(保护)、缺省和private(私有)声明一个类,可以使用的权限修饰符只有public和缺省两种,不能使用protected或private。,4.9类的封装和访问控制,47,(1)public被public修饰的成员变量和成员方法可在所有类中被访问(2)protected被protected修饰的成员变量和成员方法可在声明它们的类、该类的子类、位于同一个包中的类访问,但不能被其它包中的非子类访问(3)缺省缺省是指不使用任何权限修

温馨提示

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

评论

0/150

提交评论