第4章面向对象的程序设计.doc_第1页
第4章面向对象的程序设计.doc_第2页
第4章面向对象的程序设计.doc_第3页
第4章面向对象的程序设计.doc_第4页
第4章面向对象的程序设计.doc_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

兰州资源环境职业技术学院教师授课教案 第4章 面向对象的程序设计本章授课内容:4.1 面向对象的基本概念4.2 对象和类4.3 接口4.4 包本章授课思路:通过PPT课件,给学生讲解Java语言所采用的面向对象的程序设计的技术方法原理,并结合大量的实用的程序应用实例,在JCreator中调试运行得到正确的运行结果,验证理论技术,加深理解掌握。本章第一次课堂教学,主要给学生介绍引入面向对象的程序设计中所采用的技术方法原理的基本概念知识,让学生从“面向过程的程序设计”方法逐渐扩展(认知、理解)到“面向对象的程序设计”方法。然后在后续教学中,详细具体的、由浅入深的、循序渐进的一一讲解这些面向对象的程序设计方法:类的定义,对象实例的创建,对象的初始化(构造方法),静态成员,类的封装、继承、多态,接口,抽象类,包。使学生完整的学习、理解、掌握使用面向对象的这一程序设计技术方法。(单元教案首页)单元标题:第4章 面向对象的程序设计 教学时数:( )学时,其中理论( )学时、实验( )学时、上机( )其它( )学时,其它是指:教学目的与要求:通过本章教学,使学生能够理解面向对象的程序设计基本原理,掌握面向对象的程序设计方法、技巧。主要教学内容:4.1 面向对象的基本概念4.2 对象和类4.3 接口4.4 包教学重点与难点:重点: 4.2对象和类;4.3接口;4.4包难点: 接口的理解;类、接口、包的综合应用编程课后作业:第4章编程作业题。 课后体会: 56 兰州资源环境职业技术学院教师授课教案授课教师钟锡珍授课班级09计网授课时间2011年 月 日 星期第 周课程名称JAVA程序设计授课时数2课 题4.1 面向对象的基本概念4.2对象和类(4.2.1类的定义4.2.2对象实例的创建)教学目的1.初步认识面向对象的程序设计方法的基本原理,主要包括对象、类、接口、包、方法的基本概念;理解面向对象的程序设计方法的三大特性 封装性、继承性和多态性。2.掌握类的定义和对象实例的创建方法。教学重点与难点重点:类和对象的关系;方法(函数)的使用方法:标识符的作用域;类的定义方法;和对象实例的创建方法;难点: 类定义和类对象创建的使用区别; 教学内容、教学方法和教学过程导入新课从本节课开始,我们要正式进入面向对象的程序设计方法的学习,首先我们先认识了解一下面向对象的程序设计中方法的基本概念和原理知识,然后通过一个问题实例“计算器及其运算”的分析和程序实现,即计算器类的定义和对象的创建和使用,来学习面向对象程序编写的第一步,类与对象的基本用法。 讲授新课书写于教案纸巩固复习1.面向对象的基本概念:对象:什么都是对象,比如一个人、一个灯泡等。类:一组对象的集合;一种抽象的数据类型。接口:是对类的一种角度观察。包:程序包是多个类或接口的集合。方法(函数):方法的声明与调用;参数传递;标识符的作用域;使用Java API。2.类和对象:(1)类的定义:定义格式、修饰符的作用、类的作用域等。(2)对象的声明与使用。对象创建的格式、对象调用类的方法的使用。布置作业1.复习所学知识,课堂布置编程题。2.实习4:类与对象的基本操作教学效果分析兰州资源环境职业技术学院教师授课教案授课教师钟锡珍授课班级09计网授课时间2011年 月 日 星期第 周课程名称JAVA程序设计授课时数2课 题4.2对象和类(4.2.1类的定义4.2.2对象实例的创建)教学目的1.理解面向对象的程序设计方法中的三大特性之封装性。2.掌握类的定义和对象实例的创建方法。3.理解构造方法的原理思想,掌握构造方法的定义和使用方法4.理解掌握类的静态成员的使用方法以及与非静态成员的使用方法的区别。教学重点与难点重点:构造方法的使用方法;静态成员使用方法;方法的重载的编程技巧难点:构造方法的理解和编程技巧;类的静态成员和动态成员的用法区别;方法的重载的理解和编程技巧教学内容、教学方法和教学过程导入新课在上节课中,同学们对类和对象有了基本的理解和程序编写,这节课中,我们通过一个信用卡类及其对象创建的应用实例的分析和程序编写来继续理解掌握类和对象的使用,并引入类对象初始化的方法,即构造方法(函数)的使用。将编写好的信用卡程序进行修改,引入类的静态成员(成员变量)的使用方法。讲授新课书写于教案纸巩固复习4.2.1类的定义。(1)类的声明;(2)类的访问修饰符;(3)类作用域4.2.2对象实例的创建(1)对象的声明与使用。(2)对象的初始化。有3种方式,分别为:定义成员变量时采用默认的初值;直接赋初值;构造方法赋初值。构造方法。类中的定义格式;创建对象时的调用格式。构造方法的重载。方法的重载。(3)静态成员。布置作业1. 第4章习题、课堂布置编程作业题。2.上机实习。实习5:构造方法与方法的重载教学效果分析兰州资源环境职业技术学院教师授课教案 第4章 面向对象的程序设计4.1 面向对象的基本概念一、对象1. 什么是抽象 ?Benjamin 说:我们把自然界分解,然后组织成不同的概念。例如,把一对情侣抽象为2,把“空”抽象为0,这种表示方法就是一种抽象。自然界的抽象基于人们的经验。计算机程序设计的抽象(涉及如下两个概念)例如:汇编语言高级语言 问题空间:是需要用计算机去解决的问题,是问题解决者对问题的认识,这些问题是存在于现实生活中的。比如机场管理、个人信用卡关系、银行账户管理。解空间:所谓解空间就是对问题空间中有待解决的问题进行建模的空间。这里讨论的解空间将以计算机为载体,要做的工作就是如何将现实中将要解决的问题抽象成计算机可理解并表示的单元,这个单元即为所谓的对象。所以将现实抽象成对象是个很重要的过程。 2对象的概念 Thinking in Java 一书中第一个章节的题目叫做“Everything is an object”。Bruce Eckel 说什么都是对象,比如一个人、一个灯泡等等。以灯泡为例,灯泡有其属性,比如功率、电流、发光颜色等,也有行为,比如点亮、熄灭、调亮、调暗等。一个对象基本上都有自己的名字、属性和可以提供的服务(行为)。在把现实中的事物抽象成对象时,需要保留解决问题需要的一些东西,而忽略掉其他东西。举例说明:图4-1中的矩形是一个UML(Unified Modeling Language)图,它清晰地描述了一个对象应有的基本元素。首先,看到矩形上层外面的Type Name,这里的Type 是很严谨的定义。应该记住这样一个层次关系:Objct Class ADT。对象:就是一种抽象数据类型(ADT),和int、boolean等基本数据类型一样,都是一种数据类型。所以在后面的章节中,可以像声明一个基本数据类型一样区声明一个对象。对象提供的服务(方法或函数):对象的一些行为所带来的效果映射成现实中的服务。在图4-1的矩形框下半部分的四个行为on()、off()、brighten()、dim(),表示此处的对象提供的服务有4种,可选择打开、关闭、调亮和调暗电筒的光源。二、类问题:有两个功率不同、或者发光颜色不同的像图4-1一样的电筒,一个叫lightA,另一个叫lightB,那么怎样来处理呢?让lightA和lightB分别是不同的类型?显然从逻辑上来说是行不通的,因为这两个电筒除了属性不同,它们的行为是一样的。于是把它们都归于一个叫Light的类。1.类的定义所谓类,就是一组对象的集合。现在大多主流的面向对象的程序设计语言都用class关键字来表示类。class是一种抽象的数据类型,与用int a 来声明变量a相似,完全可以用Light lightA 来声明lightA 这个对象。这样的声明便得到lightA的服务,这就是类和对象之间的关系。2.类的特性类具有封装性、继承(Inheritance)性和多态(Polymophism)性。封装:类是属性和其所提供的服务(方法)的封装体。继承:简单使用说明,参见课本P70图4-2.图4-3。图4-2中有四个类,它们之间的关系是一个is-a的关系。所谓的is-a是指图中的苹果、桔子、香蕉都是水果的一种。可独立定义这四个类,但这样的设计不是最好的。既然苹果、桔子、香蕉都是水果,那么它们有一些共同的东西可以重用已经定义的水果类,这就是继承。苹果、桔子、香蕉都有水果的属性,图中,味道和榨汁都是他们可以提供的服务。与此同时,香蕉具有自己独特的服务:烤香蕉。水果类在继承关系中是父类(超类、基类),其他三种水果都是子类(派生类)。多态:就是指同一个符号或名字在不同情况下的不同解释。(在此间单了解一下,后面详细学习)例如:除法运算符:/ 。在Java语言中,方法的重载和重定义都是多态的体现。三、接口接口是和类相似的一种抽象数据类型,接口中只给出公有的静态常量数据成员,不能定义其他的数据成员,只能定义公有的抽象方法,不能定义其他形式的成员方法。实际上,接口表达了设计级的内容,在某种意义上,它比类更抽象,是类的一个框架,也是观察某个类的一个角度。 例如:某些电器可以遥控,“可遥控”就是一个接口。某些动物会游泳, “会游泳”就是一个接口。某些公共设施(如电影院、公共汽车等)的使用的收费情况。“收费”就是一个接口。四、包程序包是多个类或接口的集合,它使得大型Java程序可以具有清晰的层次化结构。程序包、子程序包、编译单元、类或接口构成了Java程序的逻辑组织结构;目录、子目录、文件在大多数Java运行平台下构成了Java程序的物理组织结构。程序包使得不同的类或接口的名字层次化,减少了类或接口名字的冲突,因此Java程序的重用更为方便。标准的 Java库分为许多程序包。常用的有:Java.lang(自动引入) 、 Java.applet、 Java.awt 、 Java. io、 J 、 Java.sql、 Java.util五、方法1.方法的概念:Java语言中的成员方法类似面向过程程序设计中的函数。在Java语言中,对于一个方法更好的解释是它提供了一种服务,提供了客户程序需要的接口。一个好的方法应该是独立完成某一个具体的功能,能充分体现分而治之思想的。2.方法的声明与调用A方法声明的一般形式: 返回类型 方法名字(形式参数表) 方法体; 格式说明:(1)方法名字和形式参数表构成了方法的基调(基调: 函数关系)。方法名是一个Java标识符,通常根据方法所执行的功能为方法选择一个有意义的名字;形式参数表是用逗号分隔的变量声明列表,用于接收从方法调用程序传递给该方法的数据,如果该方法不需要接收数据,那么形参表可以为空。 (2)方法的返回类型可以是所有基本数据类型,也可以是void表示方法没有任何返回结果。方法体是用花括号括住的语句系列,用于描述该方法所执行的操作。在方法体中可以使用return语句,如果方法的返回类型不是void, 那么方法体中return语句后面要根相应的返回类型的返回值;如果方法的返回类型是void,那么方法体中return语句后面可以什么都不跟。如果方法体中没有return语句,方法会在执行完最后一条语句后返回。注意,如果方法声明的返回类型不是void而方法体中没有return返回一个类型兼容的表达式,则编译器会报告一个错误。(3) 在for语句初始化部分声明变量的作用域为for语句中的三部分以及整个循环体。 (4) 类中声明的方法的作用域是包含整个类的,所以方法的声明次序是无关紧要的。程序举例:如果对作用域的概念比较模糊,就可能造成如下的标示符命名冲突:public void conflit( int x ) int x=0 ; int y=x+5 ; if( y4 ) int y=x-5 ; System.out.println(x+,y) ; B方法调用方法调用的一般形式:方法名 (实际参数表)格式说明:方法调用在Java语言中是一个表达式;实际参数表也用逗号分割,个数和形式参数表的个数相同,类型和形式参数对应兼容。注意,即使实际参数为空,形参也为空,方法名后面的圆括号也是不能省略的。方法的嵌套调用说明:在程序设计中,经常会用到嵌套调用。即方法a调用方法b,而方法b又调用了方法c,如图4-4所示。3. 参数调用参数的调用方式:有两种。对于所有的基本数据类型,采用按值调用;对于对象则按引用调用。说明: (1) 按值调用:是指当程序调用一个方法的时候,该方法的形参接收的是实际参数的拷贝而不是实际参数本身,也就是说接收的只是一个值的概念。无论在方法体中对形参作什么操作,都不会改变原来实参的值;(2) 按引用调用:是指传递的是对象的引用,也就是指向对象的指针,所以对形参的操作也就是对这个指针的操作。4. 标识符的作用域标识符:标识符的命名要求能表达变量的含义不要过于简短,这样既便于阅读也便于多人合作的开发。标识符的作用域有以下几条规则(共4条 见课本P72 )(1) 方法的形式参数涵盖整个方法体。(2) 在块中声明的标识符其作用域从声明开始到该块结束。在嵌套块之前声明的标识符涵盖该嵌套块。所谓的块就是用花括号括住的一个区域,方法就是一个块,块中也可以嵌套块。举例说明:例如,对于以下程序段:public void scope(int x)x=x+1 ; int y=x*2 ; if ( y5 ) int z=y-x ;System.out.pintln( x+,+y+,+z );y=y*2 ;int z=x+5 ;System.out.println(x+,+y+,+z );运行结果:如果上面的方法传入的参数为6,那么显示应该为:7 , 14 , 77 , 28 , 12解释:该方法中,y的作用域涵盖了if块,而在if块内定义的z在出块之前已经消亡了。说明:该规则禁止了方法体中声明的局部变量隐藏同名的形式参数,也禁止在内层块中声明的变量隐藏外层声明的同名变量。(3) 在for语句初始化部分声明变量的作用域为for语句中的三部分以及整个循环体。 (4) 类中声明的方法的作用域是包含整个类的,所以方法的声明次序是无关紧要的。如果对作用域的概念比较模糊,就可能造成如下的标识符命名冲突:public void conflit( int x ) int x=0 ; int y=x+5 ; if( y4 ) int y=x-5 ;System.out.println(x+,+y) ;程序解释说明:上述程序段中第2行发生了命名冲突,Java不允许在方法体中声明和形式参数同名的变量。第5行也有冲突,原因是在if块前第3行声明的y变量此时还在作用域中,如果再声明一个y就会产生同名冲突。由此可见,对标识符作用域的理解是很重要的。5使用Java APIJava语言的一个很大的优点是Java语言本身提供了非常丰富的API供程序员使用,里面包含了大量的方法,其中有很多是静态的方法。和静态变量(后面将详细讨论)的定义一样,静态方法是类的方法,当需要使用类的服务时,不需要创建对象来提供服务,而可以直接指示该类来提供服务,用下面的语法来实现: Class . methods( );例如,Java API 提供的Math类就有很多常用的数值运算方法,参见课本P73表4-1所示。说明:尽量去用一些现成且久经考验的工具去完成一项工作是十分明智的,API就扮演了这样一个角色。能够熟练掌握并运用Java API提供的服务,对开发程序是十分有利的。本节小结:Java程序的结构组成: package 语句- 0/1 个(或)必须放在文件开始。(包说明语句) import 语句- 0/多 个,必须放在所有类定义之前。(引入语句) 公有的(public)类定义 - 0/1 个 类定义 - 0/多 个 接口定义 - 0/多 个说明: 一个java源文件可以有三个顶层元素, 即:一个包说明;任意多个引入语句;类和接口的说明兰州资源环境职业技术学院教师授课教案4.2 对象和类在本节中要学习如何用Java语言将类和对象表达出来。一、类的定义:类与对象:一个程序是对现实世界中一些实体的建模,一个实体主要包括了属性和行为特性。 类:描述实体抽象概念的程序成分。对象:描述实体具体个体的程序成分。 即:类是一组对象的集合。数据成员(成员变量):实体的属性。方法成员:实体的行为(操作)。即:对象是数据和操作(代码)的封装。对象通过类来创建。类结构图示如下:类: 类声明类体: 变量定义 方法定义: 方法声明: 方法名和返回类型 方法体1.类声明格式:访问修饰符 class extends SuperclassName implements InterfaceName 类的数据成员 ; 类的方法成员 ;构造方法 ; 程序格式说明: 一个Java 应用程序只能由一个用public声明的类,也只能由一个包含main方法的类,这个包含main方法的类称为主类。主类和用public声明的类可以是同一个类,也可以是不同的类。 文件名应该和用public声明的类名相同。 main方法是程序的入口,程序应该从包含main方法的类开始运行。 如果某个程序中没有被声明为public的类,则可以用任意一个类的名字作为文件名,但是仍然要从包含main方法的类开始运行。2.程序举例:编写一个计算器类,可以实现加、减、乘、除四种运算。(1)问题分析:计算器的属性(数据成员):运算结果,用变量base表示,初始值规定为0。此外还表示四种运算的第一个数据。计算器提供功能(方法成员):分别为加法运算、减法运算、乘法运算、除法运算,可以通过函数(方法)实现。这四这种运算需要两个数据才能完成相应的操作,假设第一个数据已经在属性变量base中,方法中的形参变量给出第二个数据。此外,附加一个查询运算结果(读取base)的函数。(2)编写程序:例程4-1 SimpleCalculator.javapublic class SimpleCalculator private double base=0; /数据成员,存储计算结果 public void add(double arg) /加法运算 base=base+arg; public void minus(double arg) /减法运算 base=base-arg; public void multiple(double arg)/乘法运算 base=base*arg; public void devide(double arg) /除法运算 if(arg=0) return; /除数为0的特殊情况 base=base/arg; public double getResult() /取得计算结果 return base; 程序说明:【例程4-1】没有定义main()方法,因而这个程序是不完整的,它虽然可以通过编译,但必须与其他程序合在一起才能运行。3.类的访问修饰符:在Java中存在着一些修饰符,用于控制类、对象、方法的访问权限、存储空间等。 类的访问修饰符:给出类的可访问性。有如下5个关键字,是可选的,当不使用任何修饰符时,表示该类只能被同包类的成员访问(在同一个源文件中命名的类都在同一个包中)。 public 公共类,可以被其他任何类访问。 protected 受保护的类, 只能在子孙类中可以访问该类。(不用) private 私有类 该类不能被其他类使用。(不用) abstract 抽象类(不能与其他关键字组合使用) abstract 抽象类只能声明对象(定义变量),不能创建对象。abstract 类可以被继承,通过它的子孙类创建对象。所以一个类不能同时声明为abstract和final 。 final 最终类,该类不能再被继承了,没有子类。 类成员的声明格式: A 数据成员的声明格式:修饰符 数据类型 变量名 =初值 ; 修饰符的关键字有: public | protected | private static final transient volatile说明: 修饰符 public | protected | private 说明了对该数据成员的访问权限。常用的是前4种。 public 公有成员,是类与外部世界的接口,除该类本身声明的方法成员可以访问外,其他类中声明的方法成员或main方法均可访问该成员。 private 私有成员,该成员仅能由该类中声明的方法成员来访问,对于其他所有的类都不可见。 protected 受保护的成员,可以被该类本身及后代类访问或是被位于同一个包的类成员存取访问。 包级 在声明时不使用任何关键字进行修饰,则该数据成员具有包级访问控制级别。即只能由同一个程序包中的类访问。static关键字用来限定该数据成员(成员变量)为类变量,表示它们可为类的所有对象共享。 没有用static修饰数据成员(成员变量)为实例变量。 final 用来声明一个符号常量。transient用来声明一个暂时性的常量。指示Java虚拟机,该变量并不属于对象的永久状态。主要用于实现不同对象的存档功能。volatile 用来声明一个共享变量。由多个并发线程共享的变量可以用该关键字来修饰,使得各个线程对该变量的访问能保持一致。B 方法成员的声明格式: 修饰符 方法返回类型 方法名( 形参列表 ) throws Exceptionlist 方法体 修饰符的关键字有: public | protected | private static final | abstract native | synchronized说明: 使用 public | protected | private 限定方法成员的访问权限。(访问限定的方法同数据成员)如果没有上述关键字修饰,则是友好的,只有在同一个包中的类可可以通过对象进行访问(在同一个源文件中命名的类都在同一个包中)。用static限定的方法为类方法,而实例方法不需要static关键字。 final 或abstract 指明方法是否可被重写。说明:用final 修饰的方法为最终方法,不能再被子类重定义。用abstract修饰的方法是不能在这个类内实现的方法,即:抽象方法。如果一个类含有一个或多个抽象方法,则该类必须声明为abstract(抽象类) native 用来把java代码和其他语言的代码集成起来。 synchronized 用来控制多个并发线程对共享数据的访问。 throws Exceptionlist 用来处理异常 。总结 用法策略: 将所有的数据成员声明为私有的,以实现信息隐藏。 将所有的方法成员声明为公有的,以方便其他程序使用。4.类作用域数据成员(类体中定义的变量)- 在整个类中有效。局部变量(类的方法中定义的变量)-只在定义它的方法中有效。形式参数- 只在其所在的方法中有效。方法成员- 在整个类中有效。说明:在类作用域中声明的形式参数或局部变量隐藏了同名的数据成员,但是可以使用前缀 this(关键字 ,代表当前对象)访问该数据成员。具体用法举例:课本P75。例程4-2 NameHiding.javapublic class NameHiding private double x = 0; / 这个method中的x将屏蔽类成员x public boolean set(double x) if (x 0) this.x = x; /使用前缀this访问类的数据成员xreturn true; else return false;public double get() double y = x * x; double x = y + 1; return x; public class Demothis public static void main(String args) NameHiding nh=new NameHiding(); System.out.println(nh.set(6.0)=+nh.set(6.0); /* 类的私有成员x只能由该类中声明的方法成员来访问, *对于其他所有的类都是不可见。 System.out.println(nh.x=+nh.x);(错误)*/ System.out.println(nh.get()=+nh.get(); 程序运行结果:nh.set(6.0)=truenh.get()=37.0二、对象实例的创建Java程序的基本组成单位是类,类定义了一种抽象数据类型。但是若一个程序仅由类定义组成,是无法完成任何功能的,要使用这个类就需要创建可以用于服务的类对象。利用类创建若干对象实例。让这些对象实例相互协作,能够完成指定功能。1.对象的声明与使用:程序举例:计算器类创建对象,实现加、减、乘、除混合运算,并输出最后的运算结果。【例程4-3】SimpleCalculatorDemo.javapublic class SimpleCalculatorDemo public static void main(String args) SimpleCalculator momo=new SimpleCalculator(); SimpleCalculator popo=new SimpleCalculator(); momo.add(5); momo.minus(10); momo.multiple(3); momo.devide(0); popo.add(4); popo.minus(1); System.out.println(momo: +momo.getResult(); System.out.println(popo: +popo.getResult(); 程序运行结果:momo: -15.0 popo: 3.02.对象的初始化-数据成员(成员变量)赋初值当创建一个对象时,系统自动将成员变量初始化为默认值。但也允许用户自行设定初值。有如下 2种方法:成员变量在类体中声明之后,不允许用另外的语句在类体中对它赋值,但允许在声明成员变量的同时进行赋值。成员变量赋值操作可以在类的构造方法中进行。(1)构造方法使用说明:构造方法的名称必须与类名相同。构造方法必须是void型(void可省略不写),即没有返回值。在创建一个类时系统会自动创建一个默认的构造方法(是一个没有参数的特殊的构造方法;是隐式的,它的类体在程序中不出现)。如果除了默认功能外,还要在构造方法中加入其它功能,则需显式定义构造方法。(2)程序举例:编写一个银行信用卡,它具有取钱、存钱、查询余额三个功能操作。问题分析:编写一个信用卡类(CreditCard),具有属性balance,表示信用卡的存款数;属性maxOverdraft,表示本信用卡的最大透支限额。假设用户办理的信用卡的maxOverdraft如果大于等于1000元,则银行给予奖励100元存入你的balance。此外,还包括取钱(withdraw)、存钱(deposit)、查询余额(getBalance)三大功能操作,可通过方法(函数)实现。再编写一个类,创建信用卡对象,对信用卡类进行测试。编写程序:例程4-4 CreditCard.javapublic class CreditCard private double maxOverdraft;/ 透支限额private double balance; / 存款余额/ 构造方法,将透支限额maxOverdraft设置为maxpublic CreditCard(double max) maxOverdraft=max; if(max=1000) balance=100; else balance=0;/ 存款金额为amountpublic void deposit(double amount) balance=balance+amount; / 取款金额为amount;取款成功返回true,否则返回falsepublic boolean withdraw(double amount) if(amount=balance+maxOverdraft) balance=balance-amount;return true; else return false;/ 查询帐户的当前余额public double getBalance() return balance;例程4-5 CreditCardDemo.javapublic class CreditCardDemo public static void main(String args) / 为momo开设一个信用卡,允许最大透支限额为1000元CreditCard momo=new CreditCard(1000);/ momo的信用卡存入500元后又取出100元momo.deposit(500);if(!momo.withdraw(100) System.out.println(余额不足,取款失败!);/ 为popo开设一个信用卡,允许最大透支限额为500元CreditCard popo=new CreditCard(500);/ 从momo的信用卡取出700元存入popo的信用卡if(!momo.withdraw(700) System.out.println(余额不足,转帐失败!);else popo.deposit(700);/ 查询momo和popo的信用卡余额System.out.println(momo的信用卡余额为 +momo.getBalance();System.out.println(popo的信用卡余额为 +popo.getBalance(); 程序运行结果:momo的信用卡余额为 -200.0popo的信用卡余额为 700.0注意:即使没有构造方法,创建对象时仍然需要保留括号。(3)构造方法的重载:定义多个构造方法,其参数列表不同。作用:是使类对象具有不同的初值,为类对象的初始化提供方便。程序举例:Constructor.javaclass Constructor /定义类,在该类中定义了4个构造方法private int x;private double y;Constructor() x=0;y=0.0; Constructor(int x) this.x=x; Constructor(double y) this.y=y; Constructor(int x,double y) this.x=x; this.y=y; public void show() System.out.println(x=+x+ y=+y); public class ConstructorTest public static void main (String args ) /*下面4行语句创建了4个Constructor对象, 每个对象的创建使用了不同的构造方法 */ Constructor co1=new Constructor(); Constructor co2=new Constructor(3); Constructor co3=new Constructor(0.9); Constructor co4=new Constructor(5,5.9);/下面4行语句分别显示了4个对象的成员变量的初始化值 co1.show(); co2.show(); co3.show(); co4.show(); (4)方法的重载:是指在一个类的方法成员(包括其继承成员)中有多个名字相同但参数列表不同的方法。程序举例: 计算器类的加、减、乘、除四个方法可以实现方法重载。3.静态成员(成员变量)A.数据成员(成员变量)的分类:(2种)实例变量(非静态变量)- 没有 static关键字修饰使用方法:非静态的成员变量是指每一次创建对象时都会分配一个存储空间来存储这个变量。每一个对象都拥有这个变量的存储空间,这个变量属于对象的,是对象的变量。类变量(静态变量)-用static 关键字修饰使用方法:静态的类成员具有类属性,当创建一个对象或者说实例的时候,编译器并不会分配额外的空间给这个变量,所有的对象实例都共享一个变量内存空间。程序举例:统一的信用卡,其最大透支限额都相同,将其定义为静态变量。 例程4-6 UniformCreditCard.javapublic class UniformCreditCard private static double maxOverdraft = 1000; / 透支限额 private double balance = 0; / 存款余额 public void deposit(double amount) / 存款 balance = balance + amount; public boolean withdraw(double amount) / 取款 if (amount = balance + maxOverdraft) balance = balance - amount; return true; else return false; public double getBalance() return balance; 例程4-7 UniformCreditCardDemo.javapublic class UniformCreditCardDemo public static void main(String args) UniformCreditCard momo = new UniformCreditCard(); momo.deposit(500); if (!momo.withdraw(100) System.out.println(余额不足,取款失败!); UniformCreditCard popo = new UniformCreditCard(); if (!momo.withdraw(700) System.out.println(余额不足,转帐失败!); else popo.deposit(700);System.out.println(momo的信用卡余额为 + momo.getBalance();System.out.println(popo的信用卡余额为 + popo.getBalance();程序运行结果:momo的信用卡余额为 -300.0popo的信用卡余额为 700.0B.方法成员的分类:有2种。类方法:用static 关键字修饰 -类方法只能操作类变量实例方法:没有static修饰 -实例方法可以操作实例变量和类变量程序举例:程序smp34.java public class smp34 static int a1=1,a2=2; /类变量 int x; / 实例变量 smp34() x=99; public static void pntout(String s) /类方法 System.out.println(s); public static int geta1()/ /类方法 return a1; public void get() /实例方法 System.out.println(a1=+a1+ x=+x); class smp341 public static void main (String args ) smp34 abc=new smp34(); System.out.print(1+2=); System.out.println(abc.a2+abc.a1); System.out.println(smp34.a2+smp34.a1); System.out.println(abc.x); smp34.pntout(你们好,朋友们!); abc.pntout(你们好,朋友们!); System.out.println(abc.a1=+abc.geta1(); System.out.println(smp34.a1=+smp34.geta1(); abc.get(); 程序运行结果:1+2=3399你们好,朋友们!你们好,朋友们!abc.a1=1smp34.a1=1a1=1 x=994.对象的参数传递-以引用方式传递,即传递对象的指针。5.变量和对象实例生存期-参见课本P80 图4-7 变量生存期示意图。6.内部类(inner class) 概念:是定义在类中的类(类支持嵌套定义),其作用:是将逻辑上相关的类放到一起。 匿名内部类:特殊的内部类,它没有类名,在定义类的同时生成该类的一个实例。由于不会在其他地方用到该类,所以不用取名字。说明:在此介绍主要是为读者在接触到后面关于Swing/AWT的学习的章节中出现的内部类不会感到突兀。 代码举例:momo.addWindowListener ( /* 匿名内部类定义 */new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); );等价于:/ / WindowAdapter相当于一个接口public interface WindowAdapter public void windowClosing(WindowEvent e); /Anony

温馨提示

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

评论

0/150

提交评论