【Java 基礎 實驗-抽象類應用的練習】(抽象類Employee被SalariedEmployee和HourEmployee繼承 , 遍歷,Scanner 輸出)
阿新 • • 發佈:2018-10-13
http () bob alt scanner .com 系統 元素 aps
筆記總結:
1.Employee為抽象類,兩個子類進行繼承, public abstract double earning();兩個子類分別實現 2.Employee[] emps[i].toString() 才可以完整地輸出整個子類的信息! 3.構造函數中參數列表是對象, new HourEmployee("韓梅梅",1002,new MyDate(1998,12,21).....) ,也闊以! 4.讀入流:import java.util.Scanner; Scanner cin=new Scanner(System.in); int month= cin.nextInt();
實驗要求:
實驗題目: 編寫工資系統,實現不同類型員工(多態)的按月發放工資。如果當月出現某個Employee對象的生日,則將該雇員的工資增加100元。 實驗目的:對象、繼承、封裝、多態、抽象類的組合應用。 實驗說明: (1)定義一個Employee類,該類包含: private成員變量name,number,birthday,其中birthday 為MyDate類的對象; abstract方法earnings();toString()方法輸出對象的name,number和birthday。 (2)MyDate類包含: private成員變量month,day,year; toDateString()方法返回日期對應的字符串:xxxx年xx月xx日 (3)定義SalariedEmployee類繼承Employee類,實現按月計算工資的員工處理。該類包括: private成員變量monthlySalary; 實現父類的抽象方法earnings(),該方法返回monthlySalary值;toString()方法輸出員工類型信息及員工的name,number,birthday。 (4)參照SalariedEmployee類定義HourlyEmployee類,實現按小時計算工資的員工處理。該類包括: private成員變量wage和hour; 實現父類的抽象方法earnings(),該方法返回wage*hour值;toString()方法輸出員工類型信息及員工的name,number,birthday。 (4)定義PayrollSystem類,創建Employee變量數組並初始化,該數組存放各類雇員對象的引用。利用循環結構遍歷數組元素,輸出各個對象的類型,name,number,birthday,以及該對象生日。當鍵盤輸入本月月份值時,如果本月是某個Employee對象的生日,還要輸出增加工資信息。 提示: //定義People類型的數組 People c1[]=new People[10]; //數組元素賦值 c1[0]=new People("John","0001",20); c1[1]=new People("Bob","0002",19); //若People有兩個子類Student和Officer,則數組元素賦值時,可以使父類類型的數組元素指向子類。 c1[0]=new Student("John","0001",20,85.0); c1[1]=new Officer("Bob","0002",19,90.5);View Code
工程組織:
Employee.java:
package Coding; public abstract class Employee{ private String name; private int number; private MyDate birthday; @Override public String toString() { return "Employee{" + "name=‘" + name + ‘\‘‘ + ", number=" + number + ", birthday=" + birthday + ‘}‘; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } public MyDate getBirthday() { return birthday; } public void setBirthday(MyDate birthday) { this.birthday = birthday; } public Employee(String name, int number, MyDate birthday) { this.name = name; this.number = number; this.birthday = birthday; } public abstract double earning(); }View Code
HourEmployee.java:
package Coding;
public class HourEmployee extends Employee{
private double wage;
private double hour;
public HourEmployee(String name, int number, MyDate birthday, double wage, double hour) {
super(name, number, birthday);
this.hour=hour;
this.wage=wage;
}
@Override
public String toString() {
return "HourEmployee{" +"name="+super.getName()
+"number="+super.getNumber()
+" birthday="+this.getBirthday().toString()
+ " wage=" + wage
+ ", hour=" + hour + ‘}‘;
}
@Override
public double earning() {
return wage*hour;
}
}
View Code
MyDate.java:
package Coding;
public class MyDate {
private int year,month,day;
public MyDate(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
@Override
public String toString() {
return "MyDate{" +
"year=" + year +
", month=" + month +
", day=" + day +
‘}‘;
}
}
View Code
SalariedEmployee.java:
package Coding;
//月工資
public class SalariedEmployee extends Employee{
private double monthlySalary;
public SalariedEmployee(String name, int number, MyDate birthday, double monthlySalary) {
super(name,number,birthday);
this.monthlySalary=monthlySalary;
}
@Override
public String toString() {
return "HourEmployee{" +"name="+super.getName()
+"number="+super.getNumber()
+" birthday="+this.getBirthday().toString()
+ " monthlySalary=" + monthlySalary
+ ‘}‘;
}
public double earning() {
return monthlySalary*30;
}
public double getMonthlySalary() {
return monthlySalary;
}
public void setMonthlySalary(double monthlySalary) {
this.monthlySalary = monthlySalary;
}
}
View Code
PayrollSystem.java: (測試文件,放到Testing包裏 )
package Testing; import Coding.*; import java.util.Scanner; public class PayrollSystem { public static void main(String[] args) { Employee[] emps= new Employee[2]; emps[0] = new SalariedEmployee("李雷",1001,new MyDate(1998,12,21),8800); emps[1] = new HourEmployee("韓梅梅",1002,new MyDate(1998,12,21),66,6); Scanner cin=new Scanner(System.in); System.out.println("請輸入查找的員工的月份: "); int month= cin.nextInt(); for(int i=0;i<emps.length;i++){ if(emps[i].getBirthday().getMonth()==month){ System.out.print("加工資加一百!! 說說而已."); } System.out.println(emps[i].toString()); } } }View Code
輸出結果:
請輸入查找的員工的月份: 12 加工資加一百!! 說說而已.HourEmployee{name=李雷number=1001 birthday=MyDate{year=1998, month=12, day=21} monthlySalary=8800.0} 加工資加一百!! 說說而已.HourEmployee{name=韓梅梅number=1002 birthday=MyDate{year=1998, month=12, day=21} wage=66.0, hour=6.0}View Code
【Java 基礎 實驗-抽象類應用的練習】(抽象類Employee被SalariedEmployee和HourEmployee繼承 , 遍歷,Scanner 輸出)