Java程序设计实验四:继承、多态与接口2015-2016学年第一学期第1页共13页Java程序设计实验四:继承、多态与接口1.提交期限和方法期限:第12周周五(2015-11-27)23:59pm方法:由学习委员收集所有学生的实验报告,以电子档的形式提交给任课教师(发邮箱:9867941@qq.com)。2.实验目的及要求掌握Java的基本数据类型、运算符、表达式和语句。运行环境:JDK1.7开发环境:Eclipse3.实验内容及题目3.1子类的继承与方法的重写【题1中国人与美国人】在Eclipse中创建名为Lab4的新项目,编写程序模拟中国人、美国人、北京人。除主类外,程序中有4个类:People、ChinaPeople、AmericanPeople和BeijingPeople类。要求如下:(1)People类有权限是protected的double型成员变量:height和weight,以及publicvoidspeakHello()、publicvoidaverageHeight()和publicvoidaverageWeight()方法。(2)ChinaPeople类是People类的子类,新增了publicvoidchinaGongfu()方法。要求ChinaPeople重写父类的publicvoidspeakHello()、publicvoidaverageHeight()和publicvoidaverageWeight()方法。(3)AmericanPeople类是People的子类,新增publicvoidamericanBoxing()方法。要求AmericanPeople重写父类的publicvoidspeakHello()、publicvoidaverageHeight()和publicvoidaverageWeight()方法。(4)BeijingPeople类是ChinaPeople的子类,新增publicvoidbeijingOpera()方法。要求BeijingPeople重写父类的publicvoidspeakHello()、publicvoidaverageHeight()和publicvoidaverageWeight()方法。运行效果如下图。按下列代码模板要求,将【代码】部分替换为Java程序代码。Java程序设计实验四:继承、多态与接口2015-2016学年第一学期第2页共13页部分代码已给出://People.javapublicclassPeople{protecteddoubleweight,height;publicvoidspeakHello(){System.out.println(yayayaya);}publicvoidaverageHeight(){height=173;System.out.println(averageheight:+height);}publicvoidaverageWeight(){weight=70;System.out.println(averageweight:+weight);}}//ChinaPeople.javapublicclassChinaPeopleextendsPeople{publicvoidspeakHello(){System.out.println(您好);}publicvoidaverageHeight(){height=168.78;System.out.println(中国人平均身高:+height+厘米);}//重写publicvoidaverageWeight()方法,输出:中国人平均体重:65公斤//【代码1】publicvoidchinaGongfu(){System.out.println(坐如钟,站如松,睡如弓);}}//AmericanPeople.javapublicclassAmericanPeopleextendsPeople{//重写publicvoidspeakHello()方法,输出Howdoyoudo//【代码2】//重写publicvoidaverageHeight()方法,输出American'saverageheight:176cmJava程序设计实验四:继承、多态与接口2015-2016学年第一学期第3页共13页//【代码3】publicvoidaverageWeight(){weight=75;System.out.println(American'saverageweight:+weight+kg);}publicvoidamericanBoxing(){System.out.println(直拳、勾拳、组合拳);}}//BeijingPeople.javapublicclassBeijingPeopleextendsChinaPeople{//重写publicvoidaverageHeight()方法,输出北京人的平均身高:172.5厘米//【代码4】//重写publicvoidaverageWeight()方法,输出北京人的平均体重:70公斤//【代码5】publicvoidbeijingOpera(){System.out.println(花脸、青衣、花旦和老生);}}//Example.javapublicclassExample{publicstaticvoidmain(String[]args){ChinaPeoplechinaPeople=newChinaPeople();AmericanPeopleamericanPeople=newAmericanPeople();BeijingPeoplebeijingPeople=newBeijingPeople();chinaPeople.speakHello();americanPeople.speakHello();beijingPeople.speakHello();chinaPeople.averageHeight();americanPeople.averageHeight();beijingPeople.averageHeight();chinaPeople.averageWeight();americanPeople.averageWeight();beijingPeople.averageWeight();chinaPeople.chinaGongfu();americanPeople.americanBoxing();beijingPeople.beijingOpera();beijingPeople.chinaGongfu();}Java程序设计实验四:继承、多态与接口2015-2016学年第一学期第4页共13页}【本题知识点】1.子类的继承性;2.子类对象的创建过程;3.方法的继承与重写。【实验指导】1.如果子类可以继承父类的方法,子类就有权利重写这个方法,子类通过重写父类的方法可以改变方法的具体行为。2.方法重写时一定要保证方法的名字、类型、参数个数和类型同父类的某个方法完全相同,只有这样,子类继承的这个方法才被隐藏。3.子类在重写方法时,不可以将实例方法更改成类方法,也不可以将类方法更改为实例方法,即如果重写的方法是static方法,static关键字必须要保留;如果重写的方法是实例方法,重写时不可以用static修饰该方法。【学生解答】(1)程序代码:【代码1】publicvoidaverageWeight(){weight=65;System.out.println(中国人平均体重:+weight+公斤);}【代码2】publicvoidspeakHello(){System.out.println(Howdoyoudo);}【代码3】publicvoidaverageHeight(){height=176;System.out.println(American'saverageheight:+height+cm);}【代码4】publicvoidaverageHeight(){height=172.5;System.out.println(北京人平均身高:+height+厘米);}【代码5】publicvoidaverageWeight(){weight=70;System.out.println(北京人平均体重:+weight+公斤);}(2)运行结果截图:Java程序设计实验四:继承、多态与接口2015-2016学年第一学期第5页共13页【思考题(选做)】People类中的publicvoidspeakHello(),publicvoidaverageHeight(),publicvoidaverageWeight()三个方法的方法体中的语句是否可以省略?【答:】可以省略.3.2成员变量隐藏与super关键字【题2银行与利息】在Lab4项目中,编写程序。验证教材第5章81页的【例5-7】。假设银行Bank已经有了按整年year计算利息的一般方法,其中year只能取正整数。如按整年计算的方法:DoublecompuerInterest(){interest=year*0.35*savedMoney;returninterest;}建设银行的天利息计算公式为:dayInterst=天数*0.0001*存款数大连银行的天利息计算公式为:dayInterst=天数*0.00012*存款数参照例子中的建设银行或大连银行,再编写一个商业银行,让程序输出8000元存在商业银行8年零236天的利息。【知识点】1.成员变量隐藏和方法重写;2.super关键字。【实验指导】1.当super调用被隐藏的方法时,该方法中出现的成员变量是被子类隐藏的成员变量或继承的成员变量。Java程序设计实验四:继承、多态与接口2015-2016学年第一学期第6页共13页2.子类不继承父类的构造方法,因此,子类在其构造方法中需使用super来调用父类的构造方法,而且super必须是子类构造方法中的头一条语句,即如果在在子类的构造方法中,没有明显地写出super关键字来调用父类的某个构造方法,那么默认有“super();”。3.类中定义多个构造方法时,建议包括一个不带参数的构造方法,以便子类可以省略“super();”。【学生解答】(1)商业银行的程序代码:classBank{intsavedMoney;intyear;doubleinterest;publicdoublecomputerInterest(){interest=year*0.035*savedMoney;returninterest;}}classBusinessBankextendsBank{doubleyear;publicdoublecomputerInterest(){super.year=(int)year;doubleremainNumber=year-(int)year;intday=(int)(remainNumber*1000);interest=super.computerInterest()+day*0.0001*savedMoney;System.out.printf(%d元存在商业银行%d年零%d天的利息:%.2f元\n,savedMoney,super.year,day,interest);returninterest;}}publicclassExample5_2{publicstaticvoidmain(String[]args){BusinessBankbank1=newBusinessBank();bank1.savedMoney=8000;bank1.year=5.236;doubleinterest1=bank1.computerInterest();}}(2)商业银行的运行结果截图:Java程序设计实验四:继承、多态与接口2015-2016学年第一学期第7页共13页3.3接口【题3歌手大赛与学生