编程题(封装、继承、多态)
编程:某公司的雇员分为以下若⼲类:
(1) Employee:这是所有员⼯总的⽗类。
① 属性:员⼯的姓名,员⼯的⽣⽇⽉份
② ⽅法:getSalary(int month) 根据参数⽉份来确定⼯资,如果该⽉员⼯过⽣⽇,则公司会
额外奖励100 元。
(2) SalariedEmployee:Employee 的⼦类,拿固定⼯资的员⼯。
① 属性:⽉薪。
(3)HourlyEmployee:Employee 的⼦类,按⼩时拿⼯资的员⼯,每⽉⼯作超出160⼩时的部分按照1.5 倍⼯资发放。
① 属性:每⼩时的⼯资、每⽉⼯作的⼩时数。
(4) SalesEmployee:Employee 的⼦类,销售,⼯资由⽉销售额和提成率决定。
① 属性:⽉销售额、提成率。
(5) BasePlusSalesEmployee:SalesEmployee 的⼦类,有固定底薪的销售⼈员,⼯资由底薪加上销售提成部分。
① 属性:底薪。
要求:
创建⼀个Employee 数组,分别创建若⼲不同的Employee对象,并打
印某个⽉的⼯资。
注意:要求把每个类都做成完全封装,不允许⾮私有化属性。
类图如下:
package day7;
// 创建⼀个⽗类 Employee
abstract class Employee{
private String name;  //定义姓名name并私有化属性
private int month;    //定义⽣⽇⽉份month并私有化属性
public Employee(){}            //⽆参构造器
public Employee(String name,int month){  //有参构造⽅法
this.name = name;    //给属性name初始化赋值
}
//获取属性name的⽅法
public String getName(){
return name;  //返回name属性
}
/
/获取属性month的⽅法
public int getMonth(){
return month;  //返回month属性
}
//给属性name赋初始值
public void setName(String name){
this.name = name;  //本类中的属性name
}
//给属性month赋初始值
public void setMonth(int month){
}
//创建⼀个⽅法getSalary()⽤来计算⼯资,参数month是⽉份,如果当⽉是员⼯⽣⽇,奖励100元
public  double getSalary(int month){
double salary = 0;      //定义⼯资变量
h == month)salary = salary + 100;  //判断当前⽉份是否是员⼯的⽣⽇⽉份,如果是奖励100元 return salary;    //返回⼯资salary
}
}
//创建⼀个SalariedEmployee类,继承于Employee
class SalariedEmployee extends Employee{
private double monthSalary; //封装monthSalary属性
public SalariedEmployee(){}  //⽆参构造⽅法
//有参构造⽅法参数姓名⽣⽇⽉份⽉薪
public SalariedEmployee(String name,int month,double monthSalary){
super(name,month);                //调⽤⽗类有参构造⽅法
}
//获取monthSalary的值
public double getMonthSalary(){
return monthSalary;
}
//给monthSalary赋值
public void setMonthSalary(double monthSalary){
}
//覆盖⽗类中的⽅法
public double getSalary(int month){
double salary = Salary(month);      //定义⼯资变量
return salary;    //返回⼯资salary
}
}
//定义⼀个HourlyEmployee类,继承于Employee
class HourlyEmployee extends Employee{
private double hourlySalary; //定义属性hourlySalary每⼩时的⼯资
private int hours; //定义属性hours每⽉⼯作的⼩时数
public HourlyEmployee(){}    //⽆参构造⽅法
//有参构造⽅法参数姓名⽣⽇⽉份每⼩时的⼯资每⽉⼯作的⼩时数
public HourlyEmployee(String name,int month,double hourlySalary,int hours){
super(name,month);                  //调⽤⽗类有参构造⽅法
this.hourlySalary = hourlySalary ; //为属性hourlySalary初始化赋值
this.hours = hours;    //为属性hours 初始化赋值
}
public double getHourlySalary(){    //获取hourlySalary的值
return hourlySalary;
}
public int getHours(){            //获取hours的值
return hours;
}
//定义set⽅法设置hourlySalary  hours的值
public void setHourlySalary(double hourlySalary){
this.hourlySalary =hourlySalary;
}
public void setHourly(int hours){
this.hours = hours;
}
//覆盖⽗类⽅法
public double getSalary(int month){
if(hours < 0){      //如果⼯作⼩时数⼩于0  输出数据错误
System.out.println("数据错误");
return 0;
}
//⼩于160个⼩时的按照每个⽉的⼯作⼩时数乘以每⼩时的⼯资
else if(hours <= 160) return hourlySalary*Salary(month);
//超出160个⼩时的⼩时数按照1.5倍计算
else return hourlySalary*160+hourlySalary*1.5*(hours-160)+Salary(month);
}
}
class SalesEmployee extends Employee{
private double sales ; //定义销售额sales
private double rate; //定义提成率rate
public SalesEmployee(){
}
public SalesEmployee(String name,int month,double sales,double rate){ super(name,month);
this.sales = sales;
this.rate = rate;
}
public double getSales(){
return sales;
}
public double getRate(){
return rate;
}
public void setSales(double sales){
this.sales = sales;
}
public void setRate(double rate){
this.rate = rate;
}
public double getSalary(int month){
Sales()*(Rate())+Salary(month);
}
}
//声明⼀个BasePlusSalesEmployee 继承于SalesEmployee
class BasePlusSalesEmployee extends SalesEmployee{
private double baseSalary; //定义基础⼯资baseSalary
//⽆参构造⽅法
public BasePlusSalesEmployee(){}
//有参构造⽅法
public BasePlusSalesEmployee(String name,int month,double sales,double rate,double baseSalary){
super(name,month,sales,rate);
this.baseSalary = baseSalary;
}
//get/set⽅法对私有属性的调⽤和设置
public double gatBaseSalary(){
return baseSalary;
}
public void setBaseSalary(){
this.baseSalary = baseSalary;
}
//
public double getSalary(int month){
电脑编程工资多少return Salary(month);
}
}
//定义⼀个测试类
public class Day7Exc27{
public static void main(String[] args){
//声明⼀个Employee类型的数组,并创建不同⼦类型的对象
Employee[] employee = {new SalariedEmployee(“张三”,1,6000),new HourlyEmployee(“李四”,2,50,180), new SalesEmployee(“王五”,3,6500,0.15),new BasePlusSalesEmployee(“赵六”,4,5000,0.15,2000)};
//打印每个员⼯的⼯资
for(int i = 0; i < employee.length ;i++)
System.out.und(employee[i].getSalary(10)));
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。