建立类的层次结构。
创建如下图所示的类(使用类层次结构中的类)
Employee ( 姓名,性别,保险号、工作年限) 构造函数——一组set方法,一组get方法; 从键盘输入属性的方法; 屏幕输出属性的方法;
SalariedEmployee ( 每月绩效 、月薪、工作年限、年终奖金) 构造函数 ——一组set方法,一组get方法; 从键盘输入属性的方法; 计算年休假天数; 计算年终奖金(根据每月绩效,月薪和工作年限); 屏幕输出属性的方法
CommissionEmployee ( 佣金率、销售总额、年终奖金、每月销售额) 构造函数—— 一组set方法,一组get方法; 从键盘输入属性的方法; 计算年休假天数(根据年销售总额); 计算年终奖金(根据每月的月销售额和销售总额); 屏幕输出属性的方法;
HourlyEmployee ( 每小时的工资、工作小时数) 构造函数—— 一组set方法,一组get方法 屏幕输出属性的方法
BaseplusEmployee ( 每周的基本工资数、佣金率、销售总额、年终奖金、每月销售额) 构造函数 —— 一组set方法,一组get方法; 从键盘输入属性的方法; 计算年休假天数(根据年销售总额); 计算年终奖金(根据每月的月销售额和销售总额); 屏幕输出属性的方法。
代码如下(示例):
package employee; import java.util.*; /* * Employee : 姓名,性别,保险号、工作年限 构造函数 一组set方法,一组get方法 从键盘输入属性的方法 屏幕输出属性的方法 */ public class employee { String name;// 姓名 String sex;//性别 double InsuranceID;//保险号 int WorkingYear;//工作年限 public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public double getInsuranceID() { return InsuranceID; } public void setInsuranceID(double insuranceID) { InsuranceID = insuranceID; } public int getWorkingYear() { return WorkingYear; } public void setWorkingYear(int workingYear) { WorkingYear = workingYear; } /* * 从键盘输入属性的方法 */ public void input(){ Scanner in = new Scanner(System.in); System.out.println("请输入姓名:"); setName(in.nextLine()); System.out.println("请输入性别:"); setSex(in.nextLine()); System.out.println("请输入保险号:"); setInsuranceID(in.nextDouble()); System.out.println("请输入工作年限:"); setWorkingYear(in.nextInt()); in.close(); } public employee(String name, String sex, double insuranceID, int workingYear) { super(); this.name = name; this.sex = sex; InsuranceID = insuranceID; WorkingYear = workingYear; } public employee() { super(); this.name = "丈夫"; this.sex = "nan1"; InsuranceID = 195184; WorkingYear = 15; } /* * 屏幕输出属性的方法 */ public void output(){ System.out.println("姓名: "+getName()); System.out.println("性别: "+getSex()); System.out.println("保险号: "+getInsuranceID()); System.out.println("工作年限: "+getWorkingYear()); } }代码如下(示例):
package employee; import java.util.Scanner; /* * SalariedEmployee 每月绩效 月薪,工作年限,年终奖金 构造函数 一组set方法,一组get方法 从键盘输入属性的方法 计算年休假天数 计算年终奖金(根据每月绩效,月薪和工作年限) 屏幕输出属性的方法 */ public class SalariedEmployee extends employee { int performance;//每月绩效 五分制绩效 //5分超常, 4分达标, 3分可接受 , 2分需改进 , 1-0分不良 double salary;//月薪 double annualBonus;//年终奖 public int getPerformance() { return performance; } public void setPerformance(int performance) { this.performance = performance; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } public double getAnnualBonus() { return annualBonus; } public void setAnnualBonus(double annualBonus) { this.annualBonus = annualBonus; } /* * 从键盘输入属性的方法 */ public void input1() { // super.input();//super调用父类 Scanner in = new Scanner(System.in); System.out.println("请输入姓名:"); setName(in.nextLine()); System.out.println("请输入性别:"); setSex(in.nextLine()); System.out.println("请输入保险号:"); setInsuranceID(in.nextDouble()); System.out.println("请输入工作年限:"); setWorkingYear(in.nextInt()); System.out.println("输入每月绩效(5分制):"); setPerformance(in.nextInt()); System.out.println("输入月薪:"); setSalary(in.nextDouble()); in.close(); } /* * 屏幕输出属性的方法 */ public void output1() { super.output(); System.out.println("每月绩效: "+getPerformance() ); System.out.println("月薪:"+getSalary()); Bonus(); System.out.println("年终奖: "+getAnnualBonus()); Holidays(); } /* * 计算年终奖金(根据每月绩效,月薪和工作年限) */ public void Bonus() { if(WorkingYear<5) setAnnualBonus( salary*WorkingYear*performance) ; else setAnnualBonus(salary*performance*5); } /* * 计算年休假天数 */ public void Holidays() { if(WorkingYear>=1 && WorkingYear<10) System.out.println("年假休5天"); else if(WorkingYear>=10 && WorkingYear<20) System.out.println("年假休10天"); else System.out.println("年假休20天"); } public SalariedEmployee() { super(); this.performance =5; this.salary = 3000; this.annualBonus = 0; } public SalariedEmployee(String name, String sex, double insuranceID, int workingYear, int performance, double salary, double annualBonus) { super(name, sex, insuranceID, workingYear); this.performance = performance; this.salary = salary; this.annualBonus = annualBonus; } public SalariedEmployee(int performance,double salary, double annualBonus) { super(); this.performance = performance; this.salary = salary; this.annualBonus = annualBonus; } }代码如下(示例):
package employee; import java.util.Scanner; /* * CommissionEmployee 佣金率、销售总额,年终奖金,每月销售额 构造函数 一组set方法,一组get方法 从键盘输入属性的方法 计算年休假天数(根据年销售总额) 计算年终奖金(根据每月的月销售额和销售总额) 屏幕输出属性的方法 */ public class CommissionEmployee extends employee{ float CommissionRate;//佣金率 double salesAmount;//销售总额 double annualBonus;//年终奖 double monthSalesAmount;//销售月额 public float getCommissionRate() { return CommissionRate; } public void setCommissionRate(float commissionRate) { CommissionRate = commissionRate; } public double getSalesAmount() { return salesAmount; } public void setSalesAmount(double salesAmount) { this.salesAmount = salesAmount; } public double getAnnualBonus() { return annualBonus; } public void setAnnualBonus(double annualBonus) { this.annualBonus = annualBonus; } public double getMonthSalesAmount() { return monthSalesAmount; } public void setMonthSalesAmount(double monthSalesAmount) { this.monthSalesAmount = monthSalesAmount; } /* * 从键盘输入属性的方法 */ public void input(){ // super.input(); Scanner in = new Scanner(System.in); System.out.println("请输入姓名:"); setName(in.nextLine()); System.out.println("请输入性别:"); setSex(in.nextLine()); System.out.println("请输入保险号:"); setInsuranceID(in.nextDouble()); System.out.println("请输入工作年限:"); setWorkingYear(in.nextInt()); System.out.println("请输入佣金率"); setSalesAmount(in.nextFloat()); System.out.println("请输入销售月额"); setMonthSalesAmount(in.nextDouble()); System.out.println("请输入销售总额"); setSalesAmount(in.nextDouble()); in.close(); } /* * 计算年休假天数(根据年销售总额) */ public void Holidays() { if(salesAmount<20000) System.out.println("销售总额小于2万,年假休5天"); else if(salesAmount<50000) System.out.println("销售总额小于5万,年假休15天"); else System.out.println("年假休20天"); } /* * 计算年终奖金(根据每月的月销售额和销售总额) */ public void Bonus() { this.annualBonus=(monthSalesAmount*12*1.5+salesAmount*1.5)/2; } /* * 屏幕输出属性的方法 */ public void output(){ super.output(); System.out.println("佣金率:"+CommissionRate); System.out.println("销售总额:"+salesAmount); Holidays(); System.out.println("每月销售额:"+monthSalesAmount); Bonus(); System.out.println("年终奖:"+annualBonus); } public CommissionEmployee(String name, String sex, double insuranceID, int workingYear, float commissionRate, double salesAmount, double annualBonus, double monthSalesAmount) { super(name, sex, insuranceID, workingYear); CommissionRate = commissionRate; this.salesAmount = salesAmount; this.annualBonus = annualBonus; this.monthSalesAmount = monthSalesAmount; } public CommissionEmployee() { super("刘二", "男", 19454, 26); CommissionRate =(float) 0.05; this.salesAmount = 50000; // this.annualBonus = annualBonus; this.monthSalesAmount = 5000; } }代码如下(示例):
package employee; import java.util.Scanner; /* * HourlyEmployee 每小时的工资和工作小时数 构造函数 一组set方法,一组get方法 屏幕输出属性的方法 */ public class HourEmployee extends employee { int hourworktime;// 工作小时数 double hourwages;//每小时的工资 public int getHourworktime() { return hourworktime; } public void setHourworktime(int hourworktime) { this.hourworktime = hourworktime; } public double getHourwages() { return hourwages; } public void setHourwages(double hourwages) { this.hourwages = hourwages; } public void inout(){ Scanner in = new Scanner(System.in); System.out.println("请输入 工作小时数:"); setHourworktime(in.nextInt()); System.out.println("请输入每小时的工资:"); setHourwages(in.nextDouble()); in.close(); } public void output(){ System.out.println("工作小时数: "+getHourworktime()); System.out.println("每小时的工资: "+getHourwages()); } public HourEmployee() { //super(name, sex, insuranceID, workingYear); this.hourworktime = 8; this.hourwages = 60; } public HourEmployee(int hourworktime, double hourwages) { super(); this.hourworktime = hourworktime; this.hourwages = hourwages; } }代码如下(示例):
package employee; import java.util.Scanner; /* * BaseplusEmployee 每周的基本工资数,佣金率、销售总额,年终奖金,每月销售额 构造函数 一组set方法,一组get方法 从键盘输入属性的方法 计算年休假天数(根据年销售总额) 计算年终奖金(根据每月的月销售额和销售总额) 屏幕输出属性的方法 */ public class BaseplusEmployee extends CommissionEmployee { public BaseplusEmployee(String name, String sex, double insuranceID, int workingYear, float commissionRate, double salesAmount, double annualBonus, double monthSalesAmount, int weeklyBaseSalary) { super(name, sex, insuranceID, workingYear, commissionRate, salesAmount, annualBonus, monthSalesAmount); this.weeklyBaseSalary = weeklyBaseSalary; } int weeklyBaseSalary; public int getWeeklyBaseSalary() { return weeklyBaseSalary; } public void setWeeklyBaseSalary(int weeklyBaseSalary) { this.weeklyBaseSalary = weeklyBaseSalary; } public void input(){ Scanner in = new Scanner(System.in); System.out.println("请输入姓名:"); setName(in.nextLine()); System.out.println("请输入性别:"); setSex(in.nextLine()); System.out.println("请输入保险号:"); setInsuranceID(in.nextDouble()); System.out.println("请输入工作年限:"); setWorkingYear(in.nextInt()); System.out.println("请输入佣金率"); setSalesAmount(in.nextFloat()); System.out.println("请输入销售月额"); setMonthSalesAmount(in.nextDouble()); System.out.println("请输入销售总额"); setSalesAmount(in.nextDouble()); System.out.println("请输入每周基本工资"); setWeeklyBaseSalary(in.nextInt()); in.close(); } public BaseplusEmployee(int weeklyBaseSalary) { super(); this.weeklyBaseSalary = weeklyBaseSalary; } public void output(){ super.output(); System.out.println("每周基本工资"+weeklyBaseSalary); } }代码如下(示例):
package employee; //用于测试 public class test { public static void main(String[] args){ BaseplusEmployee zhang= new BaseplusEmployee(100); zhang.input(); zhang.output(); } }略
关于构造函数,eclipse可以自动生成。之所以要用get和set方法,是对象里属性是private只能通过这个方法来修改。建立构造函数,我们需要写两个——一个有参,一个无参。Java只允许单继承。子类如果没有调用父类的构造函数,就会自动调用父类无参构造函数。
this使用此对象,super调用父类(函数,构造函数,属性都可以)
对于子类调用父类输入函数,会报错。我还没有处理好。 每月销售额应该是数组,我省事就没弄了