1实验三Java面向对象高级编程一、实验目的1.掌握Java面向对象编程技术2.能够使用继承创建子类并实现方法覆盖3.能够创建异类集合并使用多态4.能够创建抽象类和接口,并探究它们的多态特性二、预备知识1.JDK的安装设置:JDK/JRE/JVM;2.Eclipse集成开发环境的绿色安装;3.掌握Java语言的面向对象特性(封装性、继承性、多态性);4.掌握Java语言的抽象类和接口。三、实验描述1.实验类型:设计2.实验学时:4学时3.实验内容:2项(参照四)四、实验内容(1)检查所使用的计算机系统:1.确认是否已安装JDK,并确认系统的环境变量设置;2.确认是否已绿色安装Eclipse集成开发环境。(2)实验内容一:使用继承和方法覆盖创建子类,并能够创建异类集合并使用多态具体要求:1.在上述银行项目中,创建Customer类:·位于包:com.mybank.domain中;·向Customer类添加四个实例变量:firstName,lastName,accounts(Account对象数组,长度为10)和numberOfAccounts(记录accounts数组索引的一个整数);·添加一个公有构造方法:两个形式参数firstName,lastname,用于初始化客户姓名、创建accounts数组和初始化accounts数组元素个数numberOfAccounts;·添加getFirstName方法:该方法返回客户的firstName实例变量;·添加getLastName方法:该方法返回客户的lastName实例变量;·添加addAccount方法:该方法有一个形式参数(即Account对象),数组的下标通过实例变量numberOfAccounts实现递增,同时将该参数对象存储在accounts数组中;·添加getNumberOfAccounts方法:该方法返回numberOfAccounts实例变量;·添加getAccount方法:该方法返回与指定的index数组下标相关的帐户对象。2.创建SavingsAccount类,该类是Account类的子类:·位于包:com.mybank.domain中;·向SavingsAccount类中添加interestRate实例变量;·添加一个有两个参数的公有构造方法:initBalance和interestRate。调用父类构造方法传递initBalance参数,并初始化实例变量interestRate;·添加accumulateInterest方法:用于计算客户的利息。23.创建CheckingAccount类,Account类的子类:·位于包:com.mybank.domain中;·向CheckingAccount类中添加overdraftAmount实例变量;·添加一个有两个参数的公有构造方法:initBalance和overdraftAmount。调用父类构造方法传递initBalance参数,并初始化实例变量overdraftAmount;·添加只有一个参数initBalance的另一个公有构造方法。用initBalance参数和overdraftAmount参数调用第一个构造方法,其中overdraftAmount参数使用默认值0.0;·覆盖withdraw方法,方法参数为amount,balance变量继承于父类。下面是withdraw方法的伪码:if(balanceamount)thendoubleoverdraftNeeded=amount–balanceif(overdraftAmountoverdraftNeeded)thentransactionfailselsebalance=0.0decrementoverdraftAmountbyoverdraftNeededelsedecrementbalancebyamount4.创建TestBanking类:·该类文件位于包:com.mybank.test·该类有程序入口main()函数;·要求:创建一名客户的若干个不同类型的账户信息,然后依次访问每一个账户,并根据不同类型的账户信息做出不同的操作。(要求使用instanceof运算符测试判断账户的类型信息,如果是SavingsAccount,则计算账户的利息;如果是CheckingAccount,则进行取钱操作,可以进行适当额度的透支);·最后输出客户账户的余额信息。(4)实验内容二:能够创建抽象类和接口,并探究它们的多态特性具体要求:1.创建项目:InterfaceProject;2.创建Animal类,该类是抽象类:·声明一个受保护的整数实例变量legs,记录动物的腿的数目;·定义一个受保护的构造方法来初始化legs实例变量;·声明抽象方法eat;·声明具体方法walk来显示与动物行走方式有关的信息(包括腿的数目);3.创建Pet接口:声明三个抽象方法:publicStringgetName();publicvoidsetName(Stringn);publicvoidplay();4.创建Spider类:·Spider类扩展了Animal类;·定义一个无参数构造方法,调用父类构造方法来指明所有蜘蛛都有八条腿;·实现eat方法;35.创建Cat类:·声明String实例变量来存储宠物的名字;·定义一个构造方法,使用String参数来指定猫的名字;该构造方法必须调用父类构造方法来指明所有猫都有四条腿;·另外定义一个无参数的构造方法,该构造方法调用上一个构造方法(使用this关键字)来传递一个空字符串作为参数;·实现Pet接口方法;·实现eat方法;6.创建Fish类:·声明String实例变量来存储宠物的名字;·定义一个无参数的构造方法,该构造方法调用父类构造方法来指明鱼没有腿;·实现Pet接口方法;·覆盖walk方法,该方法调用所有的超级方法,并打印输出一条说明鱼不会行走的消息;·实现eat方法;7.创建TestAnimal类:·该类有程序入口main()函数;·创建并操作前面所创建的类的实例;·调用每个对象中的方法;·对象类型转换;·使用多态特性;·使用super关键字调用父类方法。五、实验要求及总结1.结合上课内容,对上述程序先阅读,然后上机并调试程序,并对实验结果写出你自己的分析结论。2.整理上机步骤,总结经验和体会。3.完成实验报告和上交程序。实验三1:实验结果:4Account.java:packagecom.mybank.domain;importcom.mybank.test.*;publicclassAccount{//创建Account类privatedoublebalance;publicvoidinitBalance(doublebalance){this.balance=balance;}publicbooleandeposit(doubleamt){//deposit(double//amt),用于向帐户存钱,返回值是boolean型;if(amt0){balance=balance+amt;returntrue;}else{returnfalse;}}5publicbooleanwithdraw(doubleamt){//withdraw(doubleamt),用于从帐户取钱if(balanceamt){balance=balance-amt;returntrue;}else{returnfalse;}}publicdoublegetBalance(){//getBalance(),用于返回balance的值returnbalance;}}Customer1.java:packagecom.mybank.domain;publicclassCustomer1{//创建Customer1类privateStringfirstname;privateStringlastname;privateAccountaccouts[]=newAccount[10];privateintnumberofaccout;publicCustomer1(Stringfirstname,Stringlastname){//公有构造方法this.firstname=firstname;this.lastname=lastname;numberofaccout=0;}publicStringgetFirstName(){//getFirstName方法:该方法返回客户的firstName实例变量;returnfirstname;}publicStringgetLastName(){//getLastName方法:该方法返回客户的lastName实例变量;returnlastname;}publicvoidaddaccout(Accountaccout){//addAccount方法accouts[numberofaccout]=accout;numberofaccout++;6}publicintgetnumberofaccout(){//getNumberOfAccounts方法:该方法返回numberOfAccounts实例变量returnnumberofaccout;}publicAccountgetaccout(intindex){//getAccount方法:该方法返回与指定的index数组下标相关的帐户对象。returnaccouts[index];}}Savingaccout.java:packagecom.mybank.domain;publicclassSavingaccoutextendsAccount{//创建SavingsAccount类,该类是Account类的子类:privatedoubleinterestrate;//添加interestRate实例变量;publicSavingaccout(doublebalance,doubleinterestrate){//公有构造方法super.initBalance(balance);//调用父类构造方法传递initBalance参数this.interestrate=interestrate;}publicdoubleaccumulateinterest(){//accumulateInterest方法:用于计算客户的利息。returnthis.getBalance()*interestrate;}}Checkingaccout.java:packagecom.mybank.domain;publicclassCheckingaccoutextendsAccount{//创建CheckingAccount类,Account类的子类:privatedoubleoverdraftamount;publicCheckingaccout(intbalance,doubleoverdraftamount){//有两个参数的公有构造方法super.initBalance(balance);this.overdraftamount=overdraftamount;7}publicCheckingaccout(intbalance){//只有一个参数initBalance的另一个公有构造方法this(balance,0.0);}publicbooleanwithdraw(doubleamount){//覆盖withdraw方法if(this.getBalance()amount){doubleoverdraftneeded=amount-this.getBalance();if(overdraftamountoverdraftneeded){returnfalse;}else{this.initBalance(this.getBalance()-amount);}}else{this.initBalance(this.getBalance()-amount);}retur