JAVA实验题目8.docx
- 文档编号:26066159
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:14
- 大小:19.63KB
JAVA实验题目8.docx
《JAVA实验题目8.docx》由会员分享,可在线阅读,更多相关《JAVA实验题目8.docx(14页珍藏版)》请在冰豆网上搜索。
JAVA实验题目8
第八章类和对象的扩展
【实验目的】
(1)类的继承
a.掌握父类与子类的关系与创建方法
b.掌握上转型对象的使用方法
c.掌握子类对象创建过程中与父类构造方法的关系,与super关键字的用法
(2)多态与接口
a.掌握抽象类与抽象方法的概念
b.掌握多态的实现原理与方法
c.了解成员变量的隐藏
d.掌握接口的设计方法
【实验例】
例1:
〔继承〕
〔1〕编写一个圆类Circle,该类拥有:
①一个成员变量
Radius〔私有,浮点型〕;//存放圆的半径;
②两个构造方法
Circle()//将半径设为0
Circle(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继承Account
2、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(custMoney returnfalse; }else{ custMoney-=money; returntrue; } } voidchangePWD(intPWD){ custPWD=PWD; } } classVIPAccountextendsAccount{ intVIPLevel;//VIP特权,透支金额分3个等级为VIP0: 一般客户,不能透支,VIP1: 3000,VIP2: 10000 VIPAccount(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(remain<0){ 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;i<4;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(); else System.out.println("您的账号余额不足! "); break; case3: System.out.println("请输入新密码: "); cust[ind].custPWD=sc.nextInt(); break; case4: cust[ind].displayAccout(); break; case5: System.out.println("欢迎使用xxx银行系统! "); System.exit (1); } } } } 【练习题目】 8-1〔继承与多态〕有哺乳动物类mammal,将其作为父类,从其派生出子类猫cat和子类狗dog,基类中有方法speak()。 8-2〔重载〕编写一个Java应用程序,从键盘读取用户输入两个字符串,并重载3个strAdd函数分别实现这两个字符串的拼接、整数相加和浮点数相加。 要进展异常处理,对输入的不符合要求的字符串提示给用户,不能使程序崩溃。 〔异常处理〕 8-3〔接口〕 1.利用接口继承完成对生物、动物、人三个接口的定义。 其中生物接口定义呼吸抽象方法; 2.动物接口除具备生物接口特征之外,还定义了吃饭和睡觉两个抽象方法; 3.人接口除具备动物接口特征外,还定义了思维和学习两个抽象方法。 4.定义一个学生类实现上述人接口。 8-4〔继承、接口〕 实现一个名为Person的类和它的子类Employee,Manager是Employee的子类,设计一个接口Wage,用于涨工资,普通员工一次能涨10%,经理能涨20%。 具体要求如下: 〔1〕接口Wage包含addWage方法,创建类WageImpl用于实现接口Wage 〔2〕Person类中的属性有: name〔String类型〕,地址address〔String类型〕,定义该类的构造方法; 〔3〕Employee类中的属性有: 工号ID〔String型〕,工资wage〔double类型〕,工龄〔int型〕,定义该类的构造方法; 〔4〕Manager类中的属性有: 级别level〔String类型〕定义该类的构造方法; 〔5〕编写一个测试类,产生一个员工和一个经理给该员工和经理涨工资,并输出其具有的信息。 〔提示: 对象类型判断用instanceof〕 【综合练习】 仿照综合例子,在第七章综合例子的根底上改良。 要求: 1、增加VIP卡类,它继承于FuelCard a)VIP卡有折扣等级(设置属性成员折扣等级: level);(0级无折扣,1级98折,2级95折) b)根据需要,重写VIP卡的加油的方法〔重写〕; c)仿照综合例子,增加另一个构造函数〔重载〕,包含对level属性值的构造 2、建立4种不同油品类型〔对象数组〕,信息为 油品 G90 G93 G97 D0 单价 3、建立4加油卡(对象数组),信息为 卡号 车牌 密码 充值总额 余额 等级 1 山A66666 123456 1000 800 0 6 山A16816 654321 3000 2300 1 3 山A93398 888888 5000 3800 2 9 山A88066 999999 8000 6790 2 4、实现简单的循环菜单显示,并实现存|充值、加油、显示卡信息、修改密码、更改车牌等功能。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 实验 题目