开发基于Java语言的银行卡模拟系统 教学课件 ppt 作者 孙华林第五章 第五章 引入继承和多态继续升级Bank系统

上传人:E**** 文档编号:89500310 上传时间:2019-05-26 格式:PPT 页数:24 大小:145KB
返回 下载 相关 举报
开发基于Java语言的银行卡模拟系统 教学课件 ppt 作者 孙华林第五章 第五章 引入继承和多态继续升级Bank系统_第1页
第1页 / 共24页
开发基于Java语言的银行卡模拟系统 教学课件 ppt 作者 孙华林第五章 第五章 引入继承和多态继续升级Bank系统_第2页
第2页 / 共24页
开发基于Java语言的银行卡模拟系统 教学课件 ppt 作者 孙华林第五章 第五章 引入继承和多态继续升级Bank系统_第3页
第3页 / 共24页
开发基于Java语言的银行卡模拟系统 教学课件 ppt 作者 孙华林第五章 第五章 引入继承和多态继续升级Bank系统_第4页
第4页 / 共24页
开发基于Java语言的银行卡模拟系统 教学课件 ppt 作者 孙华林第五章 第五章 引入继承和多态继续升级Bank系统_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《开发基于Java语言的银行卡模拟系统 教学课件 ppt 作者 孙华林第五章 第五章 引入继承和多态继续升级Bank系统》由会员分享,可在线阅读,更多相关《开发基于Java语言的银行卡模拟系统 教学课件 ppt 作者 孙华林第五章 第五章 引入继承和多态继续升级Bank系统(24页珍藏版)》请在金锄头文库上搜索。

1、开发基于Java语言的银行卡模拟系统,教师:孙华林,第5章 引入继承和多态继续升级Bank系统,技能目标 理解继承和多态的概念 运用Java程序实现继承 运用Java程序实现多态:方法覆盖及方法重载 掌握super和this关键字的使用方法,上机任务 运用面向对象的技术-继承和多态继续升级Bank系统: 能够使用继承提高代码的可复用性 能够恰当使用多态-方法重载/覆盖提高代码的可扩展性和可维护性,第5章引入继承和多态继续升级Bank系统,开发基于java语言的银行卡模拟系统,5.1 何谓继承,5.1.1 自然界中的继承现象 自然界中到处呈现出一种称之为“继承”的现象,如下图5-1所示。,图5-

2、1 自然界中的继承关系,图5-1中生物类代表了最一般的概念,动物类继承了生物类的属性和行为,并定义了特有的属性和行为;脊椎动物类继承了动物的属性和行为,又定义了脊椎动物特有的属性和行为,以此类推。,开发基于java语言的银行卡模拟系统,5.1 何谓继承,5.1.2 Java中类的继承的实现 在面向对象编程的术语中,如果有两个类,它们或多或少地具有一组相同的属性和方法,我们就可以创建一个具有两个类共同属性的父类,再编写两个子类去继承父类的全部或部分属性,而不是去创建两个单独的类。这样就可以确保相同部分的属性和方法代码只编写一次而不是两次,从而减少了编码量,节省了大量的时间和精力。可见,继承可以很

3、好地解决了代码的可重用性问题。 那么在Java中到底该如何定义继承的概念呢? 当一个类自动拥有另一个类的公共属性和方法时,就称这两个类之间具有继承关系。被继承的类称为父类(或超类),继承了父类的类称为子类。 通过继承,子类不仅可以直接使用父类的数据和方法,而且还可以对这些属性和方法重新定义以及扩充新的内容。但如果父类的数据和方法声明为私有类型(private访问权限控制符),子类就不能访问它们。关于访问权限控制符将在下一章介绍。 好,下面我们来看看在Java语言中,如何实现类的继承。 在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生

4、类)。如示例5-1所示的一个简单的继承示例。 示例5-1,开发基于java语言的银行卡模拟系统,5.1 何谓继承,示例5-1输出的结果如下图5-3所示。,从例子中可以看出,在子类的声明中使用了“extends”关键字指明了一个被继承的父类就可以实现类之间的继承关系,Children类中虽然没有定义father_v属性和print()方法,但是仍然可以访问,这是因为它从父类中继承过来的原因。子类Children还定义了自己的属性children_v,这说明子类可以拥有比父类更多的属性和方法,也就是说子类可以拥有更强大的功能。,开发基于java语言的银行卡模拟系统,5.2 成员变量的隐藏,如果子类

5、中定义的新的属性变量要上和父类的属性重名,将会出现什么情况呢?那就看看示例5-2吧。 示例5-2 父类SuperClass中定义了x、y、z和str4个属性变量,而子类中也定义了x、y、z三个属性变量,这三个变量和父类中的变量重名,运行结果将会出现什么情况呢?运行结果如下图5-4所示。,结果表明,SubClass子类隐藏了父类SuperClass的x、y、z属性,继承了SuperClass的str属性,而把子类对象subClass强制类型转化为SuperClass父类的实例,引用的就是其父类SuperClass的属性变量y。,开发基于java语言的银行卡模拟系统,5.3 成员方法的覆盖,当我们

6、定义一个类时,它继承了其父类中所有的可以访问的方法。它可以直接使用这些方法,而不是将其代码复制一次,这是继承给我们带来的好处。 然而,有时我们在编程时,会希望子类的对象对父类中定义的方法作出不同的反应,也即表现出不同的行为。这时,我们可以在子类中定义相同名称和返回值的方法来覆盖父类中的方法。这样,当通过子类的对象调用这个方法时,就会调用子类中的方法,而不是父类中的方法。这就是方法的覆盖。如示例5-3所示。 示例5-3 运行结果如下图5-5所示。 可见,子类覆盖了父类的方法y(),在使用子类的实例调用这个方法时,将调用子类的方法,而不是父类中的方法。,开发基于java语言的银行卡模拟系统,5.4

7、 super和this的使用,通过前面的案例,大家已经清楚,在子类中可以声明与父类中同名的成员变量(属性)及成员方法。那么问题就出现了,如果在子类中要使用父类中的那个同名的成员,或者在子类中要使用子类中重新定义的那个成员,该如何做呢? 为了指明是引用父类中的成员,可以使用super关键字,为了指明是引用子类中的成员可以使用this关键字。 下面我们在示例5-3中增加如下片断代码。 /在父类superClass.java中增加一个如下属性 String m = “我是在父类中定义的属性m“; /修改子类SubClass.java如下 package czmec.java.ch05.methodE

8、xtend; public class SubClass extends SuperClass void y() System.out.println(“这个y()方法是子类subClass中重新定义的“); super.y(); ,开发基于java语言的银行卡模拟系统,5.4 super和this的使用,void z() System.out.println(“这个Z()方法是子类定义的新的方法“); System.out.println(super.m); System.out.println(this.m); 在y()方法中使用super关键字调用父类中的方法,在z()方法中使用supe

9、r和this分别引用父类中声明的m属性以及被子类继承过来的m属性,运行结果如下图5-6所示。,从运行结果可以发现,使用super关键字可以在子类中使用父类定义的成员,使用this关键字可以使用子类中定义或直接从父类继承过来的成员(此时this关键字可以省略)。,开发基于java语言的银行卡模拟系统,5.5 多态性,多态性是面向对象的核心特征之一。多态性是指同一名字的方法可以有多种实现形式,即不同的方法体。程序运行时系统会根据不同不同的情况,比如调用方法的参数等自动选择一个方法执行。调用者只需要使用同一个方法名,系统会根据不同情况调用相应的不同方法,从而实现不同的功能。例如,“+”运算符作用在两

10、个数值型参数时是求其和,而作用在两个字符型参数时则是将这两个字符联接在一起。 那Java为什么要允许这种“多态的行为”存在呢? 我们已经知道,在面向过程的程序设计中,各种函数不能重名,否则在调用时就会产生歧义和错误。而在面向对象编程中,有时却需要利用这样的“重名”现象来提高程序的抽象度和简洁性,从而减少编码的工作量,大大提高程序的可维护性以及可扩展性。 5.5.2 Java中如何实现多态 类的多态性提供了方法设计的灵活性和执行的多样性。 多态性的实现有以下两种形式: 1方法的覆盖(override)实现多态性 通过子类对父类方法的重新定义来实现。 其实这种实现多态性的形式在5.3节我们已经学习

11、。为了加深理解,下面再给出一个案例如示例5-4所示。,开发基于java语言的银行卡模拟系统,5.5 多态性,2方法的重载(overload)实现多态性 通过定义类中的多个同名的不同方法来实现。编译时是根据参数(个数、类型、顺序)的不同来区分不同方法的。重载的概念以及案例已经在第四章的相关章节中介绍,本章将不在给出详细的讲解,具体请参见相关章节。,开发基于java语言的银行卡模拟系统,5.6 上机实践,5.6.1 上机目标与训练技能点 【上机目标】 使用面向对象编程技术继承和多态继续升级Bank系统,从而减少编码量,更好地解决代码的可重用性问题。 【训练技能点】 (1)会使用继承定义类。 (2)

12、会使用构造方法初始化类。 (3)使用多态性方法覆盖重新定义子类中的方法,使得其具有不同的功能。 (4)把常用的操作封装成一个工具类以方便调用。 5.6.2 上机任务 本次上机任务如下: 使用Eclipse编写Customer类和CustomerVip类口和一个工具类KB,按照要求完成如下功能: (1)定义普通客户类Customer,包括:使用构造方法初始化该类;存钱方法saveMoney();取钱方法getMoney();查询余额search()等。,开发基于java语言的银行卡模拟系统,5.6 上机实践,(2)定义VIP客户类CustomerVip,要求继承自普通客户类Customer。VI

13、P客户类在能实现普通客户类的全部功能的基础上,还可以透支以及进行转账操作。 (3)编写工具类KB.java。 (4)编写测试类test。 分如下四个阶段完成任务: (1)声明普通客户类Customer 主要实现思路: 1)使用构造方法初始化该类 public Customer(String name,int ID,int password,int money) this.name=name; this.ID=ID; this.password=password; this.money=money; ,开发基于java语言的银行卡模拟系统,5.6 上机实践,2)创建存钱方法saveMoney(i

14、nt); public boolean saveMoney(int m) if(m0) if(getMoney(-m) return true; else return false; else this.money+=m; return true; ,开发基于java语言的银行卡模拟系统,5.6 上机实践,3)取钱方法getMoney(int); public boolean getMoney(int m) if(mmoney) System.out.println(“Warning:该账户不可透支,本次操作中断!“); return false; this.money-=m; return

15、true; 注意,该账户类型不可以透支。,开发基于java语言的银行卡模拟系统,5.6 上机实践,4)查询余额search()等 public void search() System.out.println(name+“(ID:“ + ID +“) 余额:“+money+“元“); 5)创建输出菜单提示方法pringMenu() public static void printMenu() System.out.println(“某某银行“); System.out.println(“); System.out.println(“存款1“); System.out.println(“取款2“

16、); System.out.println(“查余3“); System.out.println(“退出0“); System.out.println(“); ,开发基于java语言的银行卡模拟系统,5.6 上机实践,6)创建检查输入密码是否正确的的方法checkpw()。要求当3次输入密码依然错误时,将关闭系统运行,不允许用户再次输入密码。 public boolean checkpw() int i; for(i=0;i0) System.out.println(“Warning:密码错误,请输入密码:“); int pw=KB.scanInt(); if(pw=password) return true; if(i=3) System.out.println(“Warning:密码输入出错3次,操作中断!“); return false; ,开发基于java语言的银行卡模拟系统,5.6 上机实

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号