Java程序设计任务驱动式教程任务八保护你的隐私(封装的使用).ppt_第1页
Java程序设计任务驱动式教程任务八保护你的隐私(封装的使用).ppt_第2页
Java程序设计任务驱动式教程任务八保护你的隐私(封装的使用).ppt_第3页
Java程序设计任务驱动式教程任务八保护你的隐私(封装的使用).ppt_第4页
Java程序设计任务驱动式教程任务八保护你的隐私(封装的使用).ppt_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

Java程序设计任务驱动式教程 主编 孙修东 王永红高职高专规划示范教材 北京航空航天大学出版社 2 30 目录 任务一搭建环境 构建Java集成开发环境 任务二Java欢迎你 开发简单Java应用程序 任务三小试牛刀 学习Java语言基础 任务四挑战选择 使用分支控制流程 任务五游戏人生 使用循环控制流程 任务六回归自然 创建 使用类和对象 任务七3G时代的消息传递 定义和使用类方法 任务八保护你的隐私 封装的使用 任务九子承父业 继承和多态的使用 任务十上帝万能之手 接口的使用 3 30 任务十一用数组存储信息 使用数组 任务十二使用字符串进行交流 使用字符串 任务十三防患于未然 捕获并处理异常 任务十四主动出击 抛出异常 任务十五认识JavaApplet Applet入门 任务十六丰富多彩的Applet 在Applet中播放声音和显示图像 任务十七进入Windows世界 设计图形用户界面 任务十八布局规划 使用布局管理器 任务十九事件委托处理 如何处理事件 任务二十选择之道 使用选择控件和选择事件 目录 4 30 任务二十一简明清晰的菜单 使用菜单和其他常用事件 任务二十二访问数据 使用JDBC连接数据库 任务二十三访问数据升级 数据库编程 任务二十四文件管理 目录与文件管理 任务二十五顺序进出之道 文件的顺序访问 任务二十六随机进出之道 文件的随机访问 任务二十七JAVA的分身术 创建和启动线程 任务二十八线程的生命周期与优先级 线程的状态与调度 任务二十九基于连接的通信 Java中的套接字Socket 任务三十基于无连接的通信 Java中的数据报编程 目录 5 30 任务八保护你的隐私 封装的使用 2 1 知识目标 能力目标 为什么需要封装 对属性封装 用构造方法实现对象成员的初始化 方法重载 Java中的构造方法与实例方法区别 对构造方法进行重载 理解封装的概念 掌握private关键字 掌握构造方法 掌握方法重载 6 30 内容提要 4 跟我做 银行卡类的封装 1 2 3 5 实现方案 代码分析 必备知识 动手做一做 7 30 8 1跟我做 银行卡类的封装 任务情景银行卡类采用封装技术升级 每张银行卡信息包含年利率 账号 持卡人姓名 身份证号码 地址 交易金额 交易日期 余额 银行类能够存款 取款 查询 购物支付 禁止透支 根据持卡人不同操作 显示不同信息 当存款操作后 显示原有余额 本次存款数额及最终存款余额 当取款操作时 显示原有余额 今日取款数额及最终存款余额 运行结果 第1章目录 8 30 问题分析在任务七中学习过包 本任务中要使用它来进行Java程序中类的组织 把需要在一起工作的类放在同一包里 除了public修饰的类能够被所有包中的类访问外 缺省修饰符的类只能被其所在包中的类访问 不能在其包外访问 包的这种组织方式 把对类的访问封锁在一定的范围 体现了Java面向对象的封装性 在本任务中 将类放在包com task08中 包定义如下 packagecom task08 在面向对象程序设计中 提出 强内聚 弱耦合 编程思想 即一个类的内部联系紧密 类与其他类之间的联系松散 在实现AccountCard银行卡类时 尽可能把类的成员声明为私有的private 只把一些少量的 必要的方法声明为公共的public 提供给外部使用 在AccountCard类中 属性的修饰符为private 对属性的访问只局限于AccountCard类 需要在类外访问的属性有interest年利率 account账号 name持卡人姓名 id身份证号码 address地址 为此专门设置了相应的setter 方法 getter 方法 当在AccountCardTest类中访问这些属性时 使用相应的setter 方法和getter 方法 第1章目录 8 2实现方案 9 30 解决步骤1 打开Eclipse 在study项目中创建包com task08 再确定类名AccountCard 得到类的框架 2 然后 在publicclassAccountCard 下面一行输入类的属性描述 privatestaticdoubleinterest 私有 静态privateStringaccount 3 接着 在AccountCard类中输入private属性的getter 和setter 方法的定义 publicstaticdoublegetInterest 静态returninterest publicstaticvoidsetInterest doubleinterest 静态AccountCard interest interest publicvoidsetAccount Stringaccount this account account this代表当前类的实例 8 2实现方案 10 30 4 定义相应的功能方法 publicvoiddeposit doublecash System out println 存款 详细实现代码参见8 3 publicvoidwithdraw doublecash System out println 取款 详细实现代码参见8 3 publicvoidquery System out println 查询 详细实现代码参见8 3 publicvoidpurchase doublepayment System out println 购物 详细实现代码参见8 3 5 定义AccountCardTest测试类 运行程序 对AccountCard类的private属性的访问只能通过相应的getter 和setter 方法进行 8 2实现方案 11 30 程序代码packagecom task08 importjava util Date 导入程序中用到的系统类 AccountCard java 银行卡的封装 publicclassAccountCard 自定义AccountCard类 年利率 账号 持卡人姓名 身份证号码 地址 交易金额 交易日期 余额 privatestaticdoubleinterest 私有 静态privateStringaccount 私有privateStringname privateStringid privateStringaddress privatedoubleDWAmount privateDateDWDate privatedoublebalance getter setter 方法 publicstaticdoublegetInterest 静态getter returninterest publicstaticvoidsetInterest doubleinterest 静态setter AccountCard interest interest publicStringgetAccount getter returnaccount publicvoidsetAccount Stringaccount setter this account account this代表当前类的实例 publicStringgetName returnname publicvoidsetName Stringname this name name publicStringgetId returnid publicvoidsetId Stringid this id id publicStringgetAddress returnaddress publicvoidsetAddress Stringaddress this address address 存款 取款 查询 购物支付 禁止透支 publicvoiddeposit doublecash 类的存款行为 方法 第1章目录 8 3代码分析 12 30 8 3代码分析 System out println 存款 System out println 您的卡号 this account this代表当前类的实例System out println 您的姓名 this name System out println 原有余额 this balance System out println 现存入 cash this DWAmount cash balance this balance cash 余额自动计算System out println 最终余额 this balance this DWDate newDate 记录当天的日期System out println 存款日期 this DWDate publicvoidwithdraw doublecash 类的取款行为 方法 System out println 取款 System out println 您的卡号 this account System out println 您的姓名 this name System out println 原有余额 this balance System out println 现取出 cash this DWAmount cash if this balance cash 0 禁止透支this balance this balance cash 余额自动计算System out println 最终余额 this balance else System out println 取出数额太大 请重新输入 this DWDate newDate 记录当天的日期System out println 取款日期 this DWDate publicvoidquery 类的查询行为 方法 System out println 查询 System out println 您的卡号 this account System out println 您的姓名 this name System out println 最终余额是 this balance this DWDate newDate 记录当天的日期System out println 查询日期 this DWDate publicvoidpurchase doublepayment 类的付款行为 方法 System out println 购物 System out println 您的卡号 this account System out println 您的姓名 this name System out println 原有余额 this balance System out println 现付出 payment this DWAmount payment if this balance payment 0 禁止透支this balance this balance payment 自动计算余额System out println 最终余额 this balance else System out println 没有足够的余额 this DWDate newDate 记录当天的日期System out println 付款日期 this DWDate packagecom task08 importjava util Date publicclassAccountCardTest 定义测试类 paramargs publicstaticvoidmain String args AccountCard setInterest 0 03 年利率System out println 年利率 AccountCard getInterest 设置持卡人信息AccountCardwang newAccountCard wang setAccount 1111111111 wang setName 王朝 wang setIdwang setAddress 持卡人地址 wang deposit 1000 5 存款wang query 查询wang withdraw 500 取款wang query wang purchase 300 购物wang query 第1章目录 13 30 应用扩展本任务有两个方面的应用扩展 一个是在AccountCard类中增加构造方法 升级后的类名改为AccountCard2 另一个是新建AccountCard2Menu类 类中增加菜单功能 测试类相应升级为AccountCard2Test 在AccountCard2类中增加代码如下 无参构造方法 publicAccountCard2 初始化持卡人信息super this account 1111111110 this name 王朝 this idthis address 持卡人地址 this balance 0 带参构造方法 publicAccountCard2 Stringaccount Stringname Stringid Stringaddress doublebalance 初始化持卡人信息super this account account this name name this id id this address address this balance balance 新建AccountCard2Menu类代码如下 packagecom task08 publicclassAccountCard2Menu 菜单类 菜单 publicvoidmenu 菜单方法System out println n欢迎使用银行ATM系统2 0版 System out println t1 存款 System out println t2 取款 System out println t3 购物付款 System out println t4 查询 System out println t5 退出 System out print 选择请输入数字 1 5 在AccountCard2Test测试类中的代码修改如下 packagecom task08 importjava util Scanner publicclassAccountCard2Test 测试类 paramargs publicstaticvoidmain String args 程序入口方法 AccountCard2 setInterest 0 03 年利率 System out println 年利率 AccountCard2 getInterest 通过构造方法初始化持卡人信息AccountCard2wang newAccountCard2 创建类的对象intchoice do wang menu 输入数字 选择菜单 Scannerinput newScanner System in 从键盘输入数据choice input nextInt switch choice case1 wang deposit 1000 5 存款break case2 wang withdraw 500 取款break case3 wang purchase 300 购物break case4 wang query 查询break case5 System out println 谢谢您的使用 System exit 1 while choice 5 8 3代码分析 14 30 8 4必备知识 8 4 1封装的概念1 什么是封装在Java中通过private关键字限制对类的成员变量或成员方法的访问 称为封装 封装性是面向对象的基础 也是面向对象的核心特征之一 类是数据及对数据操作的封装体 类具有封装性 通过封装 将属性私有化 再提供公有方法访问私有属性 2 为什么要封装封装的目的是限制对类的成员的访问 隐藏类的实现细节 类的设计者和使用者考虑的角度不同 设计者考虑如何定义类的属性和方法 如何设置其访问权限等 而类的使用者只需知道类有哪些功能 可以访问哪些属性和方法 只要使用者使用的界面不变 即使类的内部实现细节发生变化 使用者的代码就不需要改变 增强了程序的可维护性 举个生活中封装的例子 张三是一名员工 即张三是员工类的实例 张三的隐私相当于员工类的私有属性 平时我们是无法直接获得张三的隐私 但员工有一个能力就是说出隐私 相当于员工类的公共方法 通过张三说出隐私这个公共方法 我们就可以得到张三的隐私 这就是生活中的封装 第1章目录 15 30 3 封装的实现步骤要限制类的外部对类成员的访问 可以使用访问修饰符private修饰属性 让其他类只能通过公共方法访问私有属性 封装的实现步骤如下 修改属性的访问修饰符来限制对属性的访问 例如 AccountCard类中 属性interest account name id address都设置为private privateStringaccount 属性account设为privateprivateStringname 属性name设为private 为每个私有属性创建一对赋值方法setter 和取值方法getter 用于对属性的访问 例如 AccountCard类对属性account name提供的公共setter 和getter 方法 publicStringgetAccount 属性account的getter 方法returnaccount publicvoidsetAccount Stringaccount 属性account的setter 方法this account account this代表当前类的实例 第1章目录 8 4必备知识 16 30 publicStringgetName 属性name的getter 方法returnname publicvoidsetName Stringname 属性name的setter 方法this name name 在setter 和getter 方法中 加入对属性的存取限制 例如 对身份证号码不加存取限制时的setter 方法 publicvoidsetId Stringid this id id 现在要求加入对身份证号码的长度限制 长度不为18位时在控制台显示出错信息 则setter 方法改为 publicvoidsetId Stringid if id length 18 this id id else System out println 身份证号码不对 第1章目录 8 4必备知识 17 30 4 封装之后的使用在另一个类中要对AccountCard2类中的私有属性account name赋值 先得到AccountCard2类的实例accountCard2 再通过使用setter 方法进行 accountCard2 setAccount 1111111111 accountCard2 setName 王朝 需要获取私有属性account name的值 必须使用getter 方法 Stringaccount accountCard2 getAccount Stringname accountCard2 getName 注意 不可以直接用如下方式访问私有属性account和name accountCard2 account 1111111111 accountCard2 name 王朝 Stringaccount accountCard2 account Stringname accountCard2 name 8 4必备知识 18 30 8 4必备知识 8 4 2private关键字对属性四种访问权限的比较参见表8 1 访问修饰符本类本类所在包其他包中的本类子类其他包中的非子类public能访问能访问能访问能访问protected能访问能访问能访问不能private能访问不能不能不能缺省能访问能访问不能不能注意 19 30 属性的public修饰符应少用 其他类访问本类属性应该通过相应的setter 或getter 方法进行 如果没有访问修饰符 缺省 则属性默认只能被同一个包中的类访问 在设计属性时 还有几个修饰符 static定义的属性 称为静态变量 也称为类变量 类变量很特别 与实例变量不同 可以用类直接访问 类的所对象共享该属性 final定义常量 在方法中不可改变它的值 例如publicstaticfinaldoublePI 3 14159265358979323846 语句中 PI是一个常量 参见任务十 transient定义暂时性变量 用于对象存档 Volatile易失 共享 域变量 用于并发线程的共享 参见任务二十七和二十八 8 4必备知识 20 30 8 4 3构造方法1 构造方法的概念构造方法是一种特殊的类的方法 方法名与类名相同 而且没有返回类型 也不需要void 构造方法的作用在于对象创建时初始化对象 给实例化对象的成员变量赋初值 类中的其他方法就称为实例方法 2 构造方法的目的我们观察一下AccountCard类 它有多个私有属性 为了遵循面向对象封装的思想 就有多个对应的setter方法 在使用AccountCard类的时候 必须调用setter 方法对私有属性初始化 当开发一个项目时 类的私有属性会很多 这是很繁琐也很容易出错的事情 通过构造方法简化了对象初始化的代码 3 构造方法格式与一般的类的方法相似 也有不一样之处 方法名与类名相同 无返回值 也不需要void 构造方法格式如下 public 参数列表 这也是构造方法与实例方法的区别 8 4必备知识 21 30 无参构造方法publicclassBook privateStringbookName 无参构造方法 方法名Book与类名Book相同 无返回值 也不需要void publicBook this bookName Java程序设计任务驱动式教程 publicStringgetBookName returnbookName publicvoidsetBookName StringbookName this bookName bookName 在BookTest测试类中实例化Book类时 代码如下 Bookbook newBook 实现了book对象的bookName属性的初始化 book getBookName 的返回值为 Java程序设计任务驱动式教程 8 4必备知识 22 30 带参构造方法publicclassBook privateStringbookName 带参构造方法 方法名Book与类名Book相同 无返回值 也不需要void publicBook StringbookName this bookName bookName publicStringgetBookName returnbookName publicvoidsetBookName StringbookName this bookName bookName 在BookTest测试类中实例化Book类时 代码如下 Bookbook newBook Java程序设计任务驱动式教程 有实参创建book对象的时候 显式地为bookName实例变量赋初始值 book getBookName 的返回值为 Java程序设计任务驱动式教程 当私有属性很多时 带参构造方法的参数也多 省去了多行的赋值语句 灵活性更大些 8 4必备知识 23 30 注意 构造方法不能像成员方法那样被直接调用 只能通过new运算符实例化一个对象时 由系统自动调用 实现对成员变量初始化的作用 例如 Bookbook newBook 调用构造方法 实例化一个对象bookBook 就是Book类的一个无参构造方法 在前面的任务中学习时 有的类没有定义构造方法 怎么能生成一个类的对象呢 在Java中 系统会为这样的类自动生成一个无参的默认构造方法 然后 使用默认值初始化对象的成员变量 数值型变量的默认值为0 布尔型为false 字符型为 0 字符串为null 所以 当Book类没有定义构造方法时 我们在代码中仍然可以用newBook 实例化一个对象 8 4必备知识 24 30 改错 下面Constructor类中关于构造方法有哪些错误 publicclassConstructor privateintx publicConstructor x 1 publicConstructor inti x i publicintConstructor inti x i returnx privateConstructor inti Strings publicConstructor Strings inti privateConstructe inti x i privatevoidConstructe inti x i 提示 有1个错误 区分哪些是实例方法 哪些是构造方法 8 4必备知识 25 30 8 4 4方法重载1 什么是方法重载在同一个类中 多个方法具有相同的方法名 但却具有不同的参数列表 方法之间的这种关系称为方法重载 重载方法中的参数列表必须不同 也就是说 参数个数 参数类型或参数顺序不同 至少三者中有一项不同 例如 任务中一直使用的java io PrintStream类的println 方法 能够打印多种类型数据 有多种实现方式 publicvoidprintln floatx publicvoidprintln Stringy 根据方法重载的定义 这些同名的println 方法之间的关系就是方法重载 方法重载并不由方法的返回类型决定 例如 以下同名的circle 方法之间的关系就不是方法重载 publicfloatcircle floatx publicintcircle floatx 2 为什么需要方法重载因为在完成同一功能时 可能遇到不同的具体情况 比如在控制台输出信息 可能有实数输出 整数输出 字符输出 字符串输出等 定义多个不同方法名的方法 无论在设计还是在调用时 都是很麻烦的事 采用方法重载 用相同的方法名 不同的参数列表 就解决了这些问题 8 4必备知识 26 30 3 方法重载举例加法器类代码如下 packagecom task08 Calculate java 用加法器解释方法重载 publicclassCalculate add 方法之间关系为方法重载 publicintadd inta intb 方法一 参数类型为intreturna b publicdoubleadd doublea doubleb 方法二 参数类型为doublereturna b publicfloatadd floata floatb 方法三 参数类型为floatreturna b 8 4必备知识 27 30 测试类代码 packagecom task08 publicclassCalculateTest paramargs publicstaticvoidmain String args Calcul

温馨提示

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

评论

0/150

提交评论