第八章类和对象的扩展【实验目的】(1)类的继承a.掌握父类及子类的关系及创建方法b.掌握上转型对象的使用方法c.掌握子类对象创建过程中与父类构造方法的关系,及super关键字的用法(2)多态与接口a.掌握抽象类与抽象方法的概念b.掌握多态的实现原理及方法c.了解成员变量的隐藏d.掌握接口的设计方法【实验范例】例1:(继承)(1)编写一个圆类Circle,该类拥有:①一个成员变量Radius(私有,浮点型);//存放圆的半径;②两个构造方法Circle()//将半径设为0Circle(doubler)//创建Circle对象时将半径初始化为r③三个成员方法doublegetArea()//获取圆的面积doublegetPerimeter()//获取圆的周长voidshow()//将圆的半径、周长、面积输出到屏幕(2)编写一个圆柱体类Cylinder,它继承于上面的Circle类。还拥有:①一个成员变量doublehight(私有,浮点型);//圆柱体的高;②构造方法Cylinder(doubler,doubleh)//创建Circle对象时将半径初始化为r③成员方法doublegetVolume()//获取圆柱体的体积voidshowVolume()//将圆柱体的体积输出到屏幕编写应用程序,创建类的对象,分别设置圆的半径、圆柱体的高,计算并分别显示圆半径、圆面积、圆周长,圆柱体的体积。程序代码:classCircle{//定义父类--园类privatedoubleradius;//成员变量--园半径Circle(){//构造方法radius=0.0;}Circle(doubler){//构造方法radius=r;}doublegetPerimeter(){//成员方法--求园周长return2*Math.PI*radius;}doublegetArea(){//成员方法--求园面积returnMath.PI*radius*radius;}voiddisp(){//成员方法--显示园半径、周长、面积System.out.println(圆半径=+radius);System.out.println(圆周长=+getPerimeter());System.out.println(圆面积=+getArea());}}classCylinderextendsCircle{//定义子类--圆柱类privatedoublehight;//成员变量--园柱高Cylinder(doubler,doubleh){//构造方法super(r);hight=h;}publicdoublegetVol(){//成员方法--求园柱体积returngetArea()*hight;}publicvoiddispVol(){//成员方法--显示园柱体积System.out.println(圆柱体积=+getVol());}}publicclassProg1{//定义主类publicstaticvoidmain(String[]args){//主程入口CircleCi=newCircle(10.0);//生成园类实例Ci.disp();//调用园类的方法CylinderCyl=newCylinder(5.0,10.0);//生成圆柱类实例Cyl.disp();//调用父类方法Cyl.dispVol();//调用子类方法}}例2:(重载)设计一个汽车类Multiplication,在其中定义三个同名的mul方法:第一个方法是计算两个整数的积;第二个方法是计算两个浮点数的积;第三个方法是计算三个浮点数的积。程序代码:classMultiplication{publicvoidmul(inta,intb){intm=a*b;System.out.println(a+*+b+=+m);}publicvoidmul(doublea,doubleb){floatm=(float)(a*b);System.out.println(a+*+b+=+m);}publicvoidmul(doublea,doubleb,doublec){doublem=a*b*c;System.out.println(a+*+b+*+c+=+m);}}publicclassProg1{publicstaticvoidmain(String[]args){Multiplicationtest=newMultiplication();test.mul(3,4);test.mul(2.3,3);test.mul(3,4,5);}}例3:(接口与多态)(1)定义一个接口CanFly,描述会飞的方法publicvoidfly();(2)分别定义类飞机和鸟,实现CanFly接口。(3)定义一个测试类,测试飞机和鸟。测试类中定义一个makeFly()方法,让会飞的事物飞起来。(4)然后在main方法中创建飞机对象和鸟对象,并在main方法中调用makeFly()方法,让飞机和鸟起飞。程序代码:interfaceCanFly{publicvoidfly();}classAirPlaneimplementsCanFly{publicvoidfly(){System.out.println(airplaneisflying);}}classBirdimplementsCanFly{publicvoidfly(){System.out.println(Birdisflying);}}classProg1{staticvoidmakeFly(CanFlyobj){obj.fly();}publicstaticvoidmain(String[]args){AirPlaneap=newAirPlane();Birdb=newBird();makeFly(ap);makeFly(b);}}【综合例子】例:在第七章综合例子的基础上,编写一个VIP账号的管理要求:1、VIPAccount继承Account2、VIP设置3个等级:VIP0:一般账户,不能透支VIP1:透支上限3000元VIP2:透支上限10000元1、根据透支情况,重写withdraw()方法(重写)2、两个构造函数,一个与父类Account构造函数的参数相同,另外一个参数增加设置对象的VIP等级(重载)实现简单的循环菜单显示,并实现存|取款、修改密码、显示账户余额等功能(实现的功能和第七章的综合例子相同)importjava.util.Scanner;classAccount{intcustID;StringcustName;intcustPWD;doublecustMoney;Account(intid,Stringname,intPWD,doublemoney){custID=id;custName=name;custPWD=PWD;custMoney=money;}voiddisplayAccout(){System.out.println(账号:+custID);System.out.println(户名:+custName);System.out.println(余额:+custMoney);}booleandeposit(doublemoney){custMoney+=money;returntrue;}booleanwithdraw(doublemoney){if(custMoneymoney){returnfalse;}else{custMoney-=money;returntrue;}}voidchangePWD(intPWD){custPWD=PWD;}}classVIPAccountextendsAccount{intVIPLevel;//VIP特权,透支金额分3个等级为VIP0:一般客户,不能透支,VIP1:3000,VIP2:10000VIPAccount(intid,Stringname,intPWD,doublemoney){//构造函数重载super(id,name,PWD,money);}VIPAccount(intid,Stringname,intPWD,doublemoney,intlevel){//构造函数重载super(id,name,PWD,money);VIPLevel=level;}voidsetVIPLevel(intlevel){VIPLevel=level;}booleanwithdraw(doublemoney){//函数重写doubleremain=custMoney-money;switch(VIPLevel){case0:if(remain0){System.out.println(您不是VIP客户,不能透支!您目前的余额为:+custMoney);returnfalse;}else{custMoney-=money;System.out.println(取款成功,您目前的余额为:+custMoney);returntrue;}case1:if(remain-3000){System.out.println(您的VIP等级为1,透支额度不能抽过3000元,您目前的余额为:+custMoney);returnfalse;}else{custMoney-=money;System.out.println(取款成功,您目前的余额为:+custMoney);returntrue;}case2:if(remain-10000){System.out.println(您的VIP等级为2,透支额度不能抽过10000元,您目前的余额为:+custMoney);returnfalse;}else{custMoney-=money;System.out.println(取款成功,您目前的余额为:+custMoney);returntrue;}}returntrue;}}publicclassCustDemo{publicstaticvoidmain(Stringargs[]){VIPAccountcust[]=newVIPAccount[4];cust[0]=newVIPAccount(1001,Tom,111,400.0f,0);cust[1]=newVIPAccount(1002,Mike,222,500.0f,1);cust[2]=newVIPAccount(1003,Bob,333,600.0f,2);cust[3]=newVIPAccount(1004,Cindy,444,100.0f,1);intind=0;doublemoney;System.out.println(请输入账号:);Scannersc=newScanner(System.in);longid=sc.nextLong();for(inti=0;i4;i++){if(cust[i].custID==id)ind=i;}while(true){System.out.println(\n1.存款);System.out.println(2.取款);System.out.println(3.修改密码);System.out.println(4.查询);System.out.println(5.退出);sc=newScanner(System.in);switch(sc.nextInt()){case1:System.out.println(请输入存款金额:);money=sc.nextDouble();cust[ind].deposit(money);cust[ind].displayAccout();break;case2:System.out.println(请输入取款金额:);money=sc.nextDouble();if(cust[ind].withdraw(money))cust[ind].displayAccout();elseSystem.out.println(您的账号余额不足!);break;case3:S