java程序设计项目教程项目三.ppt

上传人:max****ui 文档编号:6362378 上传时间:2020-02-23 格式:PPT 页数:67 大小:369.50KB
返回 下载 相关 举报
java程序设计项目教程项目三.ppt_第1页
第1页 / 共67页
java程序设计项目教程项目三.ppt_第2页
第2页 / 共67页
java程序设计项目教程项目三.ppt_第3页
第3页 / 共67页
点击查看更多>>
资源描述
项目三ATM取款管理系统 中国人民大学出版社 技能目标完成ATM取款机的服务功能 为用户提供存款 取款 余额查询 修改密码 查看用户信息等服务 知识目标理解类和对象的概念 掌握类的定义及对象的创建 掌握对象的使用 掌握类的封装 继承和多态 理解抽象类的定义并学会使用抽象类 掌握接口的声明及实现方法 掌握包的定义及使用的基本方法 项目任务开发一个ATM取款机管理系统 该系统的主要功能是用户输入卡号 密码通过验证后 就可以实现存款 取款 余额查询 修改密码 查看用户信息等操作 任务一银行卡类的实现 到银行来开户 银行要分配给用户一张银行卡 用卡号来唯一标示这张银行卡 classCard StringcardNumber null 构造方法Card voidsetCardNumber Stringnumber cardNumber number StringgetCardNumber returncardNumber 相关知识 1 基本概念面向对象程序设计是一种全新的程序设计理念 它的关键是将数据及对数据的操作整合在一起 形成一个相互依存 不可分割的整体 对象 对相同类型的对象进行抽象和处理 可以对结构复杂而又难以用以前方法描述的对象 设计出它的类 面向对象程序设计就是设计和定义这些类 定义好的类可以作为一个具体的数据类型进行类的实例化操作 通过类的实例化操作 就可以得到一系列具有通用特征和行为的对象 下面就来学习类和对象的基本概念及类的基本特征 2 类 1 什么是类类是对一个或几个相似对象的描述 是具有相同属性和方法的一组对象的集合 它把不同的对象具有的共性抽象出来 类是同一类对象的原型 对象是由类创建的 类和对象是面向对象程序设计的两个最基本的概念 类是对象的抽象和描述 对象是类的实例化 在面向对象程序设计中 类 class 是既包括数据又包括作用于数据之上的一组操作的封装体 类中的数据称为成员变量 类中对数据的操作称为成员方法 成员变量反映类的状态和特征 成员方法表示类的行为能力 2 定义类类的定义语法格式 修饰符 class类名 extends父类名 implements接口名序列 类主体 说明 修饰符 通常为访问控制符 特征说明符 可以使用的修饰符有public final abstract class 是定义类的关键字 中的内容为可选内容 类名 要符合标示符的命名规范 体现类的功能 习惯上首字符大写 extends父类名 表示该类继承了一个类 父类名指明被继承的类名称 implements接口名序列 表示该类所实现的接口 接口名序列指明该类要实现的一个或多个接口的名称 若实现多个接口则用逗号分隔 类主体 是类设计的主体部分 一般包括成员变量和成员方法 成员变量的定义格式为 修饰符 数据类型变量名 初值 成员方法的定义格式为 修饰符 返回值类型方法名 参数列表 方法体 3 对象 1 什么是对象现实世界中 对象 object 是具有某种特征和行为的结合体 任何事物都可以称为对象 在面向对象程序设计中 对象是类的实例 instance 对象与类的关系就像上一章学过的变量与数据类型的关系一样 对象使用数据和方法描述它的状态和行为 一般通过对象的成员变量描述其状态 通过对象的成员方法实现其行为 类是一种数据类型 对象是用来描述客观事物的一个实体 类是对象的模板 对象是类的实例化 当用一个类创建一个对象时 该对象就是这个类的一个实例 2 创建对象在Java中 创建对象包括声明对象和为对象分配内存空间两部分 声明对象格式为 类名对象名 例如 Circlec1 为对象分配内存空间要使用new运算符和类的构造方法 格式为 对象名 new类名 参数列表 例如 c1 newCard 在实际应用中 经常将声明对象和为对象分配内存空间合并为一步执行 格式为 类名对象名 new类名 参数列表 3 对象的使用创建对象的过程就是为对象分配内存空间的过程 一个对象一旦拥有了自己的内存空间 它就可以调用创建它的类中的方法和使用自己的变量 要想使用对象还必须通过运算符 来对对象的变量和方法进行访问 格式为 对象名 变量名对象名 方法名 实际参数列表 说明 对象可以用 运算符访问其变量和方法 但访问的这些变量和方法会有一定的限制 如例题中的Circle类 其中radius被定义为私有的变量 所有在例题中的CircleArea类中就不能使用c1 radius 10 和c2 radius 50 语句来赋值 具体访问权限见任务二访问权限控制符部分 调用有形式参数的方法时 需要用实际参数替换方法中的形式参数 实际参数的个数 类型及顺序必须与形式参数一致 调用无形式参数方法时不需要实际参数 但调用方法名后的 不能省略 它是方法调用的标志 类成员与实例成员的区别 类成员 在Java的类设计中 如果用修饰符static声明它的一个成员 则该成员就被称为类成员 也成为静态成员 类成员包括类成员变量和类成员方法 如果static用来修饰成员变量 则该成员变量称为类成员变量 在访问时可以用 类名 变量名 的形式进行访问 如果static用来修饰成员方法 则该成员方法称为类成员方法 在调用时可以用 类名 方法名 参数列表 进行调用 并且在类成员方法中只能使用类成员变量 否则会产生错误 类成员可以通过类名直接访问 也可以通过对象来访问 实例成员是不通过修饰符static声明的成员 包括实例成员变量和实例成员方法 只有创建对象之后才可以访问 通过对象才能访问实例成员变量和实例成员方法 任务二用户信息类的实现 用户来银行开户 银行分配给用一张银行卡后 还要记录用户的相关信息 如姓名 性别 年龄等 classUser privateStringuserName null privateStringsex null privateStringage null privateCardcard newCard 构造方法User StringuserName Stringsex Stringage Cardcard this userName userName this sex sex this age age this card card 访问成员变量的普通方法publicvoidsetUserName StringuserName this userName userName publicCardgetCard returncard publicstaticvoidmain String args Cardcard1 newCard card1 setCardNumber 123456789 Useruser newUser 张三 男 20 card1 System out println Usernameis user getUserName System out println Sexis user getSex System out println Ageis user getAge System out println Cardnumberis user getCard getCardNumber 相关知识 1 访问权限控制符访问控制符是一组限定类 类内部的属性和方法能否被这个类以外的其它类访问和调用的修饰符 类的访问控制符有public和缺省 friendly 两个情况 它的使用将在后面包的使用中讲解 属性和方法的访问控制符有四个 分别为public private protected friendly 在通常情况下没有修饰符修饰的时候缺省为friendly类型 java中类的限定词的作用范围比较 2 封装面向对象的另一个重要的特征就是封装 在本节前面的例子中类的属性和方法没有设置访问限制 这种方式使得类中或类之外访问类成员没有区别 都可以任意修改类中的成员 调用类中的方法对数据进行操作 是对象具有潜在危险的不稳定状态 因此我们希望有一个更好的符合面向对象程序设计思想的解决办法 这就是类的封装原则 在一个类中定义的属性由该类自身进行操作 不希望别的类对类中的属性进行直接操作 而是通过声明一些公有的方法提供给其它类来调用 达到访问类中属性的目的 封装的目的 隐藏类的实施细节 迫使用户通过接口去访问数据 增强代码的可维护性 3 this应用在User类种多次用到了this关键字 下面对它做一下介绍1 当方法中传递的参数与类的属性重名的时候 使用this来区分类的属性和方法中同名的局部变量 2 方法的返回值是当前类的对象的时候 需要使用this关键字 3 定义类的时候 如果写了多个构造方法 经常会在一个构造方法的第一条语句使用this 调用它前面定义好的构造方法 以免出现重复代码 任务三不同类型的银行卡的实现 用户使用的银行卡有不同的类型 如普通银行卡 信用卡 医保卡等 下面实现银行卡的分类 classCommonCardextendsCard classCurecardextendscard finalclassCreditCardextendsCard privatedoublemoney 0 0 publicdoublegetMoney returnmoney publicvoidsetMoney doublemoney this money money 相关知识 1 继承继承根据基础类创建具有特殊属性和行为的新类 由继承而得到的新类称为子类 被继承的基础类称为父类 子类继承父类的属性和行为并根据需要增加自己的状态和行为 子类和父类的关系如图 1 子类的创建语法格式如下 class子类名extends父类名 类体 子类继承了父类的哪些成员 子类可以继承父类的属性 包括实例成员变量和类成员变量 子类可以继承父类除构造方法以外的成员方法 包括实例成员方法和类成员方法 子类可以重定义父类成员 子类不能继承父类的构造方法是因为父类构造方法创建的是父类对象 子类必须定义自己的构造方法 创建子类自己的对象 2 子类的上传型对象所谓上转型对象是指有父类A与子类B 用父类A声明的句柄指向子类B生成的对象 通过父类的句柄调用子类对象 这种情况称为上转型对象 对象的上转型对象的实体是子类负责创建的 但上转型对象会失去原对象的一些属性和功能 上转型对象不能操作子类新增的成员变量与成员方法 上转型对象可以操作子类继承或重写的成员变量与方法 如果子类重写父类的某个方法后 通过上转型对象调用的方法一定是调用了重写的方法 2 final的使用final修饰符可以修饰类以及类的成员 被final修饰的成为最终类 它不可以再被继承生成子类 被final修饰类的属性称为常量 它的值在程序的执行过程中被初始化后就不可改变 被final修饰的方法称为最终方法 是不可以被当前类的子类重新定义的方法 子类只能使用从父类继承来的被final声明的方法 不可以覆盖它 知识拓展 1 抽象类 1 定义抽象类Java语言中 用abstract修饰的类称为抽象类 用abstract修饰的方法称为抽象方法 定义抽象类的格式如下 abstractclass类名 类体 定义抽象方法的格式如下 abstract返回值类型方法名 参数 定义的抽象方法只有声明而无具体实现 2 抽象类的使用抽象类在使用的使用时通过类的继承机制 定义子类来实现抽象类中的抽象方法 从而来使用抽象类 关于抽象类和抽象方法的一些规定 抽象类不一定要包含抽象方法 但有抽象方法的类一定是抽象类 一个类继承了抽象类 要实现抽象类中的所有的抽象方法 才能够进行实例化 若子类没有实现抽象类中的所有抽象方法 则子类也必须声明为抽象类 2 接口 1 接口的定义 interface 接口 关键字使抽象的概念更进了一层 我们可以想象为一个 纯 抽象类 就是一组具有特定意义的静态常量和抽象方法的集合 创建接口的语法如下 修饰符 interface接口名 extends父接口列表 修饰符 类型属性名 值 返回值类型方法名 参数列表 说明 修饰接口的修饰符只有public和默认修饰符两种 接口可以是多重继承 接口只能继承接口 不能继承类 属性定义时必须赋初值 是常量 属性性前修饰符时默认该属性由final static修饰 接口中的方法必须是抽象方法 与类的继承类似 接口也可以继承 一个接口可以继承多个接口 利用继承技术 可方便地为一个接口添加新的方法声明 也可以将几个接口合并成一个新接口 在这两种情况下 最终得到的都是一个新接口 2 接口的实现接口的定义仅仅是定义了行为的协议 没有定义履行接口协议的具体方法 这些方法的真正实现是在继承这个接口的各个类中完成 要由这些类来具体定义接口中各抽象方法的方法体 以适应某些特定的行为 因而在Java中 通常把对接口功能的实现称为实现接口 实现接口的语法如下 class类名implements接口名 接口名 说明 implements是一个类实现接口的关键字 一个类可以实现多个接口 接口之间用逗号进行分割 如果实现接口的类不是abstract修饰的抽象类 则在类主体中必须实现接口列表中的所有接口的所有抽象方法 一个类在实现接口的抽象方法时 必须显式地使用public修饰符 否则将在编译时 提示错误 3 接口回调接口回调把用接口声明的句柄指向实现这一接口的类创建的对象 那么该句柄就可以调用被类实现的接口中的方法 接口回调也是多态的一种表现形式 任务四工具类的实现 取款机管理系统 需要给用户提示信息 用户根据提示信息进行操作 而取款机需要根据用户的输入信息 启动相应的程序 用工具类把用户常用的输入操作和反馈给用户的提示信息组织到一块 importjava io importjava util classTools MSG提示信息显示publicstaticvoidshow Stringmsg 显示银行卡信息publicstaticvoidshow Cardcard 显示用户信息publicstaticvoidshow Useruser 显示账户信息publicstaticvoidshow Acountacount 显示提示用户操作的信息publicstaticvoidshowServerInformation 从键盘上读取一个整数publicstaticintinputInt inti 0 Scannerin null try in newScanner System in i in nextInt catch Exceptione System out println ExceptionwhenreadStringfromthekeyboard inputString returni 从键盘上读取一个实数publicstaticdoubleinputDouble doubled 0 Scannerin null try in newScanner System in d in nextDouble catch Exceptione System out println ExceptionwhenreadStringfromthekeyboard inputString returnd 从键盘上读取一个字符串publicstaticStringinputString Strings null Scannerin null try in newScanner System in s in nextLine catch Exceptione System out println ExceptionwhenreadStringfromthekeyboard inputString returns trim 相关知识 1 多态多态的表现形式主要有方法的重载和方法的覆盖 对象的上传型对象和接口的回调也是多态的表现形式 1 方法重载Java语言由于构造方法的名字由类名决定 所以只能有一个构造方法名称 但假若我们想用多种方式创建一个对象呢 就需要用到构造方法的重载 1 构造方法的重载2 普通方法的重载 方法重载是指同一个类中多个方法享有相同的名字 但是这些方法的参数必须不同 参数不同是 指或者是参数的个数不同 或者是参数类型不同 或者是不同类型参数的排列顺序不同 需要注意的是 方法的返回值类型不能用来区分方法的重载 2 方法覆盖类继承的过程中 子类方法跟父类方法名字相同 并且传递的参数完全一样 称子类覆盖了父类的方法 覆盖父类的方法通常是为了对其进行修改 并添加新的功能 当一个被覆盖方法通过父类引用被调用 Java根据当前被引用对象的类型来决定执行哪个方法 说明 在子类覆盖父类的某个方法时 不能降低方法的访问权限 子类不能覆盖父类中声明为final或static的方法 可以通过super关键字调用父类中被覆盖的成员 2 super的使用在类继承的过程中 可以使用super引用父类的成员 super引用有以下两种用法 1 调用父类的构造方法构造方法作用的特殊性决定了她不可以被继承 但是在设计子类的时候 我们希望在父类某个构造方法的基础上来设计子类的构造 就可以在子类构造方法的第一条使用super来调用父类的某个构造 语法如下 super 参数 2 调用父类的同名成员 被子类隐藏的属性和被子类覆盖的方法都可以通过super来调用 1 调用父类被覆盖的方法语法如下 super 方法名 参数 2 调用父类被隐藏的成员变量语法如下 super 变量名 3 程序包包是java提供的一种命名空间机制 实现了对类的存放和引用位置的管理 包对应一个文件夹 包中还可以再有子包 成为包的等级 在编写类的时候可以声明类所在的包 在同一个包中类名不能重复 在不同的类中类名可以相同 当源程序中没有声明类所在的包时 类被放在默认的包中 放在默认包中的类要求类名唯一 不能重复 否则会产生冲突 1 创建包Java提供创建包的语句是package语句 创建包的语法格式为 package 其中package是创建包的关键字 包名是包的标识符 Package语句使得其所在文件中的所有类都隶属与指定的包 Package语句必须为源程序文件的第一条语句 2 引用包使用import语句引入需要的类import语句用于为程序引入需要的类 通过import语句引入类后 就可以在程序中直接使用类名来访问 import语句的语法格式如下 import 类名 接口名 其中import是关键字 多个包及类或接口之间用圆点 分隔 表示包中所有类或接口 4 Java的系统类库介绍java的系统类库又称为应用程序编程接口 API ApplicationProgrammingInterface 系统类库中的类被以包为单位分类后放在了不同的包中 1 java lang包在这个包中包含了建立Java程序的基本类 不需要显式地写出导入这个包的语句 任何程序中 该包都被自动导入 下面来介绍下这个包中的常用类 1 字符串处理的StringBuffer类 该类具备String类的一些功能 该类对象可以根据需要自动增长存储空间 适合处理变长字符串 StringBuffer类的方法构造方法 publicStringBuffer intlength 构造一个不带字符 但具有指定初始容量的字符串缓冲区publicStringBuffer Strings 构造一个字符串缓冲区 并将其内容初始化为指定的字符串内容 实例方法publicStringBufferappend Strings 将指定的字符串s追加到字符序列后publicStringBufferinsert intx Strings2 将字符串插入字符序列的位置x处publicinlength 返回长度 字符数 publicvoidsetLength intnewLength 设置字符序列的新长度publicvoidsetCharAt intx charc 将给定索引处的字符设置为chpublicStringBufferreplace intstart intend Strings2 使用给定String中的字符替换此序列的从start到end的子字符串publicStringBufferdelete intstart intend 移除此序列的从start到end的子字符串 2 math类类中定义了一些进行数学运算的方法 publicstaticdoublesin doublea 求正弦值publicstaticdoublecos doublea 求余弦值publicstaticdoubletan doublea 求角的正切值publicstaticdoubleacos doublea 求角的反余弦 范围在0 0到 之间publicstaticdoubleasin doublea 求角的反正弦 范围在 2到 2之间publicstaticdoubleatan doublea 求角的反正切 范围在 2到 2之间 publicstatictypemax a b 返回e的a次方publicstatictypemin a b 返回a的自然对数publicstatictypeabs a 返回a的b次方publicstaticintround doublea 返回最接近参数的int 即返回四舍五入后的值publicstaticdoublerandom 返回值是一个伪随机数 值介于0 1间 3 Object类Object类是Java程序中所有类的直接和间接父类 也是类库中所有类的父类 包含了所有Java类的公共属性 这里介绍Object类的两个常用方法 equals 的使用publicbooleanequals Objectobj 该方法判断两个对象的引用是否相等 若相等返回true 否则返回false toString 方法toString 方法被用来将一个对象转换成String表达式 4 数据类型类数据类型类又称包装类 与基本数据类型 如 int double char long等 密切相关 每一个基本数据类型都对应一个包装类 均包含在java lang包中 它的名字也与这个基本数据类型的名字相似 例如 double对应的包装类为Double 不同的是 包装类是一个类 有自己的方法 这些方法主要用来操作和处理它所对应的基本数据类型的数据 构造方法publicInteger intvalue 根据一个整型数生成一个整型对象publicInteger Strings 根据一个整数形式的数字字符序列生成一个整型对象实例方法publicstaticintintValue 将包装类对象转换成整型数据publicstaticintparseInt Strings 将字符串转化为整型数据publicstaticIntegervalueOf Strings 它将一个字符串转化成Integer对象publicStringtoString 返回一个表示该Integer值的String对象 1 java util包1 ArrayList类包含在java util包中 ArrayList对象是数据的列表 是长度可变的对象引用数组 使用上类似于动态数组 构造方法 publicArrayList 构造一个初始容量为10的空列表publicArrayList intsize 使用给定大小创建一个数组列表 向数组列表添加元素时 此大小自动增加实例方法 publicintsize 返回此列表中的元素数publicEget intindex 返回此列表中指定位置上的元素 E代表取出的元素的类型 publicintindexOf objectx 返回元素在列表中首次出现的位置 publicintlastIndexOf objectx 返回元素在列表中最后一次出现的位置publicbooleanadd Eo 将指定的元素加入到列表的尾部 若加入成功 返回true 否则 返回false 如果此列表不允许有重复元素 并且已经包含了指定的元素 则返回falsepublicbooleanremove Objecto 从此列表中移除指定元素的单个实例 如果移除成功 返回true 否则返回false 2 Vector类Vector类包含在java util包中 是可以实现可增长的对象数组 但是 Vector的大小可以根据需要增大或缩小 以适应创建Vector后进行添加或移除项的操作 构造方法 publicVector 创建一个空Vector对象publicVector intinitialCap 创建一个空Vector 其初始大小由initialCap指定 容量增量为0publicVector intinitialCap intinc 创建一个空Vector 初始容量由initialCap指定 容量增量由inc指定实例方法 publicvoidaddElement Objectx 将元素x加入到向量数组的尾部publicvoidinsertElementAt Objectx intindex 把对象加入到向量数组的指定位置publicEelementAt intindex 返回指定位置的元素publicintsize 返回数组中的对象个数 动手练习 练习目的 1 掌握继承的概念 派生类的定义 2 掌握多态性的实现 3 掌握接口定义和实现练习内容 1 定义一个学生类 Student 属性包括 学号 姓名 性别 年龄 构造方法给各属性赋值 方法包括修改学号 姓名 性别 年龄以及一个toString 方法将Student类中的所有属性组合成一个字符串输出 2 为学生类派生出一个子类研究生类 GraduateStudent 研究生类在学生类的属性上增加一个专业 profession 属性 构造方法要继承父类的构造方法并加以扩充 方法上增加修改专业的方法 重写父类中的toString 方法 使它能除了显示学生类的信息外 还要显示它的专业属性 3 设计一个人员类 Person 其中包含一个方法pay 代表人员的工资支出 在从Person类派生出助教类 Assistant 讲师类 Instructor 和教授类 Professor 其中 工资支出 基本工资 授课时数 每课时酬金助教基本工资2000元 每课时酬金35元 讲师基本工资2800元 每课时酬金40元 教授基本工资4000元 每课时酬金45元 将pay方法定义在接口中 设计实现多态性
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!