某公司的僱員分爲以下若干類:
1、Employee:這是所有員工總的父類,屬性:員工的姓名,員工的生日月份。方法:getSalary(intmonth) 根據參數月份來確定工資,如果該月員工過生日,則公司會額外獎勵100元。
2 SalariedEmployee:Employee的子類,拿固定工資的員工。屬性:月薪
3HourlyEmployee:Employee的子類,按小時拿工資的員工,每月工作超出160小時的部分按照1.5倍工資發放。屬性:每小時的工資、每月工作的小時數
4SalesEmployee:Employee的子類,銷售人員,工資由月銷售額和提成率決定。屬性:月銷售額、提成率
5BasePlusSalesEmployee:SalesEmployee的子類,有固定底薪的銷售人員,工資由底薪加上銷售提成部分。屬性:底薪。可編寫程序代碼如下實現題目要求功能:
首先是Employee父類
public class Employee {
String name;
int month;
public double getSalary(double salary,int month){
if(this.month==month){//this關鍵字調用被隱藏的屬性
return salary+100;
}else{
return salary;
}
}
}
下面是繼承Employee父類的SalariedEmployee子類
public class SalariedEmployee extends Employee {//extends表示繼承
double salary;//定義成員變量,該子類沒有寫成員方法,可以通過繼承父類方法實現計算工資功能
}
下面是繼承Employee父類的HourlyEmployee子類
public class HourlyEmployee extends Employee {
double time;
double timesalary;
public double getSalary(int month){//此處是對父類成員方法的重寫
if(time>160){
return super.getSalary(160*timesalary+timesalary*1.5*(timesalary-160), month);//super關鍵字調用被隱藏的父類該成員方法
}else{
return super.getSalary(time*timesalary, month);
}
}
}
下面是繼承Employee父類的SalesEmployee子類
public class SalesEmployee extends Employee {
private double monthlysales;//private實現對成員變量的封裝,其他類中不可以直接訪問該變量
private double rate;
public double getMonthlysales() {//該方法可以讓外界獲取私有變量的值
return monthlysales;
}
public void setMonthlysales(double monthlysales) {//該方法可以讓外界給私有變量賦值
this.monthlysales = monthlysales;
}
public double getRate() {
return rate;
}
public void setRate(double rate) {
this.rate = rate;
}
public double getSalary(int month){//父類方法的重寫
return super.getSalary(monthlysales*rate,month);
}
}
下面是繼承SalesEmployee父類的BasePlusSalesEmployee子類
public class BasePlusSalesEmployee extends SalesEmployee {//該子類繼承了父類SalesEmployee的所有非私有成員變量和成員方法,也繼承了Employee類的所有非私有成員變量和成員方法
double salary;
public double getSalary(int month){//對父類SalesEmployee成員方法的重寫
return super.getSalary(month)+salary;
}
}
最後對上述進行測試
public class TextEmployee {
public static void main(String[] args) {
SalariedEmployee s1=new SalariedEmployee();//用new關鍵字實例化對象
s1.month=2;
s1.salary=1000;
System.out.println(s1.getSalary(s1.salary, 2));
HourlyEmployee s2=new HourlyEmployee();
s2.month=3;
s2.time=100;
s2.timesalary=10;
System.out.println(s2.getSalary(3));
SalesEmployee s3=new SalesEmployee();
s3.month=4;
s3.setMonthlysales(10000);//爲私有變量賦初值,此處不可以像其他對象一樣直接賦初值
s3.setRate(0.1);
System.out.println(s3.getSalary(4));
BasePlusSalesEmployee s4=new BasePlusSalesEmployee();
s4.month=5;
s4.setMonthlysales(10000);
s4.setRate(0.1);
s4.salary=100;
System.out.println(s4.getSalary(5));
}
}
程序運行結果
1100.0
1100.0
1100.0
1200.0