Java语言程序设计A实验2继承与多态.docx
- 文档编号:3049567
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:12
- 大小:104.43KB
Java语言程序设计A实验2继承与多态.docx
《Java语言程序设计A实验2继承与多态.docx》由会员分享,可在线阅读,更多相关《Java语言程序设计A实验2继承与多态.docx(12页珍藏版)》请在冰豆网上搜索。
Java语言程序设计A实验2继承与多态
实验课程名称:
Java语言程序设计A
实验项目名称
实验成绩
实验者
专业班级
组别
同组者
无
开始日期
第一部分:
实验预习报告(包括实验目的及意义,实验基本原理与方法,主要仪器设备及耗材,实验内容及要求,实验方案与技术路线等)
一.实验目的及意义
1.根据实际需求,使用UML类图,合理设计父类、子类及其成员(实例变量、方法)。
2.编写抽象父类与抽象方法,并最终由具体子类实现抽象方法。
3.实现子类方法对父类方法的覆盖。
4.使用多态。
5.动态方法调度与向下强制类型转换。
6.设计、实现算法逻辑。
二.实验基本原理与方法
1.继承的概念、思想、层次、定义。
2.抽象类与抽象方法的概念、定义,抽象方法的最终实现。
3.方法覆盖的概念、实现。
4.多态的概念、优势、应用。
5.动态方法调度的概念、实现。
三.主要仪器设备及耗材
1.PC及其兼容机。
2.计算机操作系统。
3.程序编辑器EditPlus/Eclipse。
4.Java开发工具JDK。
四.实验内容及要求
实验2-1:
类Person定义了姓名name、出生年份birthYear,其子类CollegeGraduate定义了平均成绩gpa、毕业年份graduateYear。
设计完整的继承层次结构UML类图,并转换为Java代码。
编写测试类PersonTest,输出毕业生的姓名、年龄、毕业年份、平均成绩,一种可能的运行结果示例如下:
实验2-2(选做):
某小型企业销售部门共4名员工:
销售经理1名、专职销售员2名、兼职促销员1名。
员工工资的计算方法:
销售经理每月底薪3000元,销售提成为该部门当月销售总额的1%;专职销售员每月底薪2000元,销售提成为当月销售额的5%;兼职促销员时薪50元。
请从键盘输入每位员工的相关信息,计算工资。
五.实验方案及技术路线(设计思路、UML类图、算法、注意事项)
实验2-1的继承层次结构UML类图如下:
对于实验2-2,在父类中首先要定义抽象方法用于计算工资,再写两个子类,分别计算经理和销售员的工资,计算销售员的工资时需要区分全职和兼职,所以需要重载getWage()方法,而经理的工资需要统计部门的总销售额,所以测试类中最后创建Manager的实例。
简略的UML类图如下:
第二部分:
实验过程记录(可加页)(代码、运行结果、实验中出现的问题及解决过程)
实验2-1:
●Person类代码如下:
publicclassPerson
{
privateStringname;
privateintbirthYear;
publicPerson(Stringname,intbirthYear)
{
this.name=name;
this.birthYear=birthYear;
}
publicStringgetName(){
returnname;}
publicvoidsetName(Stringname)
{
this.name=name;
}
publicintgetBirthYear()
{
returnbirthYear;
}
publicvoidsetBirthYear(intbirthYear)
{
this.birthYear=birthYear;
}
}
●CollegeGraduate类代码如下:
publicclassCollegeGraduateextendsPerson
{
privatedoublegpa;
privateintgraduateYear;
publicCollegeGraduate(Stringname,intbirthYear,doublegpa,intgraduateYear)
{
super(name,birthYear);
this.gpa=gpa;
this.graduateYear=graduateYear;
}
publicdoublegetGpa()
{returngpa;}
publicvoidsetGpa(doublegpa)
{this.gpa=gpa;}
publicintgetGraduateYear()
{returngraduateYear;}
publicvoidsetGraduateYear(intgraduateYear)
{this.graduateYear=graduateYear;}}
●PersonTest类代码如下:
publicclassPersonTest
{
publicstaticvoidmain(String[]args)
{
CollegeGraduatestudent=newCollegeGraduate("姓名",出生年份,3.88,2016);
System.out.println("学生:
"+student.getName()+"\n出生年份为:
"+student.getBirthYear()+"\n毕业年份:
"+student.getGraduateYear()+"\n平均绩点为:
"+student.getGpa());
}
}
PersonTest类输出结果如下:
省略
实验2-2:
●SaleEmployee类代码如下:
publicabstractclassSaleEmployee{
privateStringemployeeNumber;
privateStringemployeeName;
privateStringstatus;
privateStringpost;
publicSaleEmployee(StringemployeeNumber,StringemployeeName,
Stringstatus,Stringpost)
{
this.employeeNumber=employeeNumber;
this.employeeName=employeeName;
this.status=status;
this.post=post;}
publicStringgetEmployeeNumber()
{
returnemployeeNumber;
}
publicStringgetEmployeeName()
{
returnemployeeName;
}
publicStringgetStatus()
{
returnstatus;
}
publicStringgetPost()
{
returnpost;
}
publicabstractdoublegetWage();
publicabstractdoublegetWage(inttempHour);
}
●Salesman类的代码如下:
publicclassSalesmanextendsSaleEmployee{
privatedoublesales;
publicSalesman(StringemployeeNumber,StringemployeeName,Stringstatus,Stringpost,
doublesales)
{
super(employeeNumber,employeeName,status,post);
this.sales=sales;
}
publicdoublegetSales()
{
returnsales;
}
@Override
publicdoublegetWage()
{
return2000+sales*0.05;
}
publicdoublegetWage(inthour)
{
doublewage=0;if(getStatus().equals("P")||getStatus().equals("p"))
{
wage=50*hour;
}
returnwage;
}
publicStringtoString()
{Stringshow;
if(getStatus().equals("P")||getStatus().equals("p"))
show="兼职销售员编号:
"+getEmployeeNumber()+"\n"
+"兼职销售员姓名:
"+getEmployeeName()+"\n"
+"销售额"+sales+"\n"+"时薪:
50元";
else
{
show="全职销售员编号:
"+getEmployeeNumber()+"\n"+"全职销售员姓名:
"+getEmployeeName()+"\n"+"销售额"+sales+"\n"+"底薪:
2000元";}
returnshow;
}
}
●Manager类的代码如下:
publicclassManagerextendsSaleEmployee{
privatedoubletotalSales;
publicManager(StringemployeeNumber,StringemployeeName,Stringstatus,Stringpost,
doubletotalSales)
{
super(employeeNumber,employeeName,status,post);
this.totalSales=totalSales;
}
@Override
publicdoublegetWage()
{
return3000+totalSales*0.01;}
publicStringtoString(){
return"销售经理编号:
"+getEmployeeNumber()+"\n"
+"销售经理姓名:
"+getEmployeeName()+"\n"
+"部门销售总额:
"+totalSales+"底薪:
3000元";
}
@Override
publicdoublegetWage(inttempHour)
{
//此类中不使用该方法
return0;
}
}
●EmployeeTest类的代码如下:
importjava.util.Scanner;
publicclassEmployeeTest{
publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);
SaleEmployee[]employeeList=newSaleEmployee[4];
for(inti=0;i<3;i++)
{
System.out.println("请输入1名销售员的编号");
StringnumberTemp=sc.next();
System.out.pri
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 语言程序设计 实验 继承