java实验报告8.docx
《java实验报告8.docx》由会员分享,可在线阅读,更多相关《java实验报告8.docx(10页珍藏版)》请在冰豆网上搜索。
java实验报告8
实验报告
(2014/2015学年第2学期)
课程名称
JAVA程序设计
实验名称
抽象类和抽象方法
实验时间
2015
年
5
月
7
日
指导单位
计算机学院/软件学院
软件工程系
指导教师
周莉
学生姓名
班级学号
学院(系)
计算机软件学院
专业
计算机科学与技术
实验名称
抽象类和抽象方法
指导教师
周莉
实验类型
上机
实验学时
2
实验时间
2015-5-7
一、实验目的
1.掌握多态的实现
2.掌握抽象类和抽象方法的定义和使用
二、实验环境(实验设备)
1.每位学生配备计算机一台
2.计算机需安装好JDK和Jcreator
三、实验内容
1.首先编写一个抽象类,要求该抽象类有3个抽象方法:
Publicabstractvoidf(intx);
Publicabstractdoubleg(doublex);
Publicabstractdoubleh(doublex);
然后分别给出这个抽象类的3个子类。
要求:
在应用程序主类中使用这些子类创建对象,再让它们的上转型对象调用方法f()、g()和h()。
(1)源程序:
abstractclassA{
publicabstractvoidf(intx);
publicabstractvoidg(intx,inty);
publicabstractdoubleh(doublex);
}
classA1extendsA{
publicvoidf(intx){
System.out.println(x);
}
publicvoidg(intx,inty){
intz=x+y;
System.out.println(z);
}
publicdoubleh(doublex){
returnx*x;
}
}
classA2extendsA{
publicvoidf(intx){
System.out.println("Hello:
"+x);
}
publicvoidg(intx,inty){
intz=x-y;
System.out.println(z);
}
publicdoubleh(doublex){
returnMath.sqrt(x);
}
}
classA3extendsA{
publicvoidf(intx){
System.out.println("你好:
"+x);
}
publicvoidg(intx,inty){
doublez=(double)x/y;
System.out.println(z);
}
publicdoubleh(doublex){
return1/x;
}
}
publicclassZuoYe5_2{
publicstaticvoidmain(Stringargs[]){
Aa=newA1();
a.f(10);
a.g(12,20);
System.out.println(a.h(100));
a=newA2();
a.f(10);
a.g(12,20);
System.out.println(a.h(100));
a=newA3();
a.f(10);
a.g(12,20);
System.out.println(a.h(100));
}
}
(2)实验结果:
2.设计一个人员类(Person),其中包含一个方法pay,代表人员的工资支出。
再从Person类派生出助教类(Assistant)、讲师类(Instructor)、副教授类(AssistantProfessor)和教授类(Professor)。
其中:
工资支出=基本工资+授课时数*每课时兼课金。
但助教基本工资为800,每课时兼课金25,讲师基本工资为1000,每课时兼课金35,
副教授基本工资为1200,每课时兼课金40,教授基本工资为1400,每课时兼课金50。
将Person定义为抽象类,pay为抽象方法,设计程序实现多态性。
(1)源程序:
abstractclassPerson{
protectedStringname;
protecteddoubleclassum;
publicPerson(){
this.name="";
classum=0;
}
publicPerson(Stringname,doubleclassum){
this.name=name;
this.classum=classum;
}
abstractpublicdoublepay();
publicStringtoString(){
return"姓名:
"+this.name+"\t工资支出:
"+this.pay()+"\n";
}
}
classAssistantextendsPerson{
publicAssistant(Stringname,doubleclassum){
super(name,classum);
}
publicdoublepay(){
return800+classum*25;
}
}
classInstructorextendsPerson{
publicInstructor(Stringname,doubleclassum){
super(name,classum);
}
publicdoublepay(){
return1000+classum*35;
}
}
classAssistantProfessonextendsPerson{
publicAssistantProfesson(Stringname,doubleclassum){
super(name,classum);
}
publicdoublepay(){
return1200+classum*40;
}
}
classProfessorextendsPerson{
publicProfessor(Stringname,doubleclassum){
super(name,classum);
}
publicdoublepay(){
return1400+classum*50;
}
}
publicclasssy8_2{
publicstaticvoidmain(Stringargs[]){
Personps[]=newPerson[4];
ps[0]=newAssistant("张三",120);
ps[1]=newInstructor("赵二",130);
ps[2]=newAssistantProfesson("李四",125);
ps[3]=newProfessor("王五",134);
Stringoutput="";
for(inti=0;ioutput+=ps[i];
System.out.println(output);
}
}
(2)实验结果:
3.定义一个抽象类Bank,它包含有oneyearRate(定期利率)、oneyearNationaldebt(国债利率)和interestRate(活期利率)常数和count()方法及show()方法。
Count()方法用于对本息合计(存款本金+利息)进行计算,而show()方法用于对本息合计进行显示。
由于对不同的存款方式,利率是不同的,因此此程序分别定义多个子类实现对抽象类的继承,实现对利率的计算和显示。
注意:
本程序定义了定期利率、活期利率、国债利率三种利率,按照一万元钱位存款单位进行统计,计算每种利率下存款一年后的本息合计。
除了国债外,其他利率都要交纳个人所得税20%。
(1)源程序:
abstractclassBank{
protectedstaticfinalfloatoneyearRate=0.0178f;
protectedstaticfinalfloatoneyearNationaldebt=0.0198f;
protectedstaticfinalfloatinterestRate=0.0078f;
abstractvoidcount();
abstractvoidshow();
}
classInterestRateCalcuteextendsBank{
privatefloatsaving;
privatedoublesum;
InterestRateCalcute(floati){
saving=i;count();
}
publicvoidcount(){
sum=saving+(saving*Bank.interestRate*0.8);
}
publicvoidshow(){
System.out.println("Withcurrentinterestrate,sum="+sum);
}
}
classOneyearNationaldebtCalcuteextendsBank{
privatefloatsaving;
privatedoublesum;
OneyearNationaldebtCalcute(floati){
saving=i;count();
}
publicvoidcount(){
sum=saving+(saving*Bank.interestRate*0.8);
}
publicvoidshow(){
System.out.println("Withnationaldebtrate,sum="+sum);
}
}
classOneyearRateCalcuteextendsBank{
privatefloatsaving;
privatedoublesum;
OneyearRateCalcute(floati){
saving=i;count();
}
publicvoidcount()
{
sum=saving+(saving*Bank.oneyearRate*0.8);
}
publicvoidshow()
{
System.out.println("Withfixedrate,sum="+sum);
}
}
classCalculate{
publicstaticvoidmain(Stringargs[])
{
intmon=10000;
OneyearRateCalcuterate=newOneyearRateCalcute(mon);
rate.show();
OneyearNationaldebtCalcutedebt=newOneyearNationaldebtCalcute(mon);
debt.show();
InterestRateCalcuteinterest=newInterestRateCalcute(mon);
interest.show();
}
}
(2)实验结果:
四、实验小结(包括问题和解决方法、心得体会等)
本次实验中,我们主要练习编译了跟抽象类有关的相关程序。
其中主要包括已知抽象方法编写抽象类、抽象类抽象方法实现多态性、通过定义多个子类来实现对类的继承。
由于课前试验代码老师已经给出,所以我们完成得比较顺利。
通过本次实验,我基本掌握了实现多态的方法,也练习了抽象类和抽象方法的定义和使用,都掌握得比较好。
以后也还需要多加练习,能更加熟悉。
五、指导教师评语
成绩
批阅人
日期