实验要求
- 掌握类的继承
- 掌握接口的定义与实现
实验内容
- 计算工资
要为某个公司编写雇员( n个雇员)支付月工资,这个公司有各种类型的雇员(Employee),不同类型的雇员按不同的方式支付工资:
(1)经理(Manager):有固定月工资属性,每月工资为固定的工资。
(2)销售人员(Salesman):有月基本工资和月销售提成属性,每月工资是在基本工资的基础上还有销售提成。
编写一个Java Application程序,计算出公司每月为雇员支付的工资总和。
提示:雇员类(Employee) 有姓名name和工号num属性,同时有一个抽象方法int ComputeSalary( )来计算薪资。
运行样例可参考下图:
实现思路
新建Employee类,设置两个继承类Manager和Salesman,在继承类复写ComputeSalary( )方法,新建数组Employee存放输入的实例,在实例中把薪水相加,最后输出add。
程序代码(部分展示)
public class Main {
public static void main(String []args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
Employee e[]=new Employee[n];
int add = 0;
String a1="经理";
String a2="销售";
//Employee[] e=new Employee[n+1];
for(int i=0;i<n;i++) {
String s=sc.next();
if(s.equals(a1)) {
e[i]=new Manager(sc.next(),sc.nextInt(),sc.nextInt());
add+=e[i].ComputeSalary();
}
else if(s.equals(a2)){
e[i]=new Salesman(sc.next(),sc.nextInt(),sc.nextInt(),sc.nextInt());
add+=e[i].ComputeSalary();
}
}
System.out.printf("%d",add);
//System.out.printf("%S",add);
}
}
结果截图
实验心得
- 比较字符要用equals不能用“==”
- New 一个实例在循环中和循环外是不一样的,在循环外会不断被新数字替代,只保留最后一个数字,在循环内会生成n个实例但无法被保存很久,新数字输入时会被清空,避免在循环体中使用new实例