Java语言程序设计A实验2继承与多态Word格式文档下载.docx
《Java语言程序设计A实验2继承与多态Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Java语言程序设计A实验2继承与多态Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
二.实验基本原理与方法
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类图如下:
第二部分:
实验过程记录(可加页)(代码、运行结果、实验中出现的问题及解决过程)
●Person类代码如下:
publicclassPerson
{
privateStringname;
privateintbirthYear;
publicPerson(Stringname,intbirthYear)
{
this.name=name;
this.birthYear=birthYear;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname)
{
publicintgetBirthYear()
returnbirthYear;
publicvoidsetBirthYear(intbirthYear)
●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("
show="
兼职销售员编号:
+getEmployeeNumber()+"
\n"
+"
兼职销售员姓名:
+getEmployeeName()+"
销售额"
+sales+"
+"
时薪:
50元"
;
else
show="
全职销售员编号:
全职销售员姓名:
底薪:
2000元"
returnshow;
●Manager类的代码如下:
publicclassManagerextendsSaleEmployee{
privatedoubletotalSales;
publicManager(StringemployeeNumber,StringemployeeName,Stringstatus,Stringpost,
doubletotalSales)
this.totalSales=totalSales;
return3000+totalSales*0.01;
publicStringtoString(){
return"
销售经理编号:
销售经理姓名:
部门销售总额:
+totalSales+"
3000元"
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