《JAVA繼承與多型》【Person、Student、Employee類】(注:此題在書上原題基礎上有修改)設計一個名為Person的類和它的兩個名為Student和Employee子類。
題目:【Person、Student、Employee類】(注:此題在書上原題基礎上有修改)設計一個名為Person的類和它的兩個名為Student和Employee子類。
每個人都有姓名和電話號碼。學生有年級狀態(大一、大二、大三或大四)。將這些狀態定義為常量。一個僱員有工資和受聘日期。定義一個名為MyDate的類,包含資料域:year(年)、month(月)和day(日)。將各個類的資料域進行封裝,並設定合理的讀寫訪問器。
覆蓋每個類中的toString方法,返回類名及相應的類中可以獲取的所有資訊構成的字串,如Person類的toString方法返回“Person類:姓名為* 電話為
在Student和Employee兩個類中分別加入displayObject()方法,可以打印出對學生和僱員的提示訊息,提示學生“to (學生姓名):請按時交實驗報告”,提示僱員“to (僱員姓名):請按時上班”。
目標輸出任務:
畫出這些類的UML圖。
實現這些類。
編寫一個測試類,1)建立方法public static void m1(Person p),顯示p的姓名;2)建立方法public static void m2(Person p),列印p的toString方法返回的字串;3)建立方法public static void m3(Person p),如果p是Student類或者Employee類的例項,分別呼叫它們的displayObject();4)在主函式中建立Person、Student、Employee的物件例項,將它們均宣告為Person類物件。將它們分別傳入m1、m2和m3,體會多型。
//程式碼實現:
//Personl類
package shiyan51;
public class Person {
public String name; public String PhoneNumber; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPhoneNumber() { return PhoneNumber; } public void setPhoneNumber(String phoneNumber) { PhoneNumber = phoneNumber; } public Person(String name,String PhoneNumber){ this.name=name; this.PhoneNumber=PhoneNumber; } public String toString(){ return "姓名為:"+name+"電話為:"+PhoneNumber; }
}
//Student類
package shiyan51;
public class Student extends Person {
public String Grade;
public final static String freshman ="大一";
public final static String sophomoreman="大二";
public final static String junior="大三";
public final static String senior="大四";
public String getGrade() {
return Grade;
}
public void setGrade(String Grade) {
this.Grade = Grade;
}
public Student(String name,String PhoneNumber,String Grade){
super(name,PhoneNumber);
this.Grade=Grade;
}
public void displayObject(){
System.out.println("to"+name+":請按時交實驗報告");
}
public String toString(){
return super.toString()+"年級為:"+Grade;
}
}
//Employee類
package shiyan51;
public class Employee extends Person {
private double Salary;
Mydate mydate;
public int year;
public int month;
public int day;
public void MyDate(int year,int month,int day){
this.year=year;
this.month=month;
this.day=day;
}
public Employee(String Name,String PhoneNumber,double Salary,Mydate date){
super(Name,PhoneNumber);
this.Salary=Salary;
mydate=date;
}
public double getSalary() {
return Salary;
}
public void setSalary(double salary) {
Salary = salary;
}
public void displayObject(){
System.out.println("to"+name+":請按時上班");
}
public Mydate getMydate() {
return mydate;
}
public void setMydate(Mydate mydate) {
this.mydate = mydate;
}
public String toString() {
return super.toString()+"工資:"+Salary+" "+mydate.year+" "+mydate.month+" "+mydate.getDay();
}
}
//Mydate類
package shiyan51;
public class Mydate {
public int year;
public int month;
public int day;
public Mydate(int year, int month, int day) {
this.year=year;
this.month=month;
this.day=day;
}
public void setYear(int year) {
this.year = year;
}
public void setMonth(int month) {
this.month = month;
}
public void setDay(int day) {
this.day = day;
}
public int getYear(){
return year;
}
public int getMonth(){
return month;
}
public int getDay(){
return day;
}
}
//test類
package shiyan51;
public class test {
public final static String freshman ="大一";
public final static String sophomoreman="大二";
public final static String junior="大三";
public final static String senior="大四";
//建立三種方法輸出目標
public static void m1(Person P){
System.out.println("name of person:"+P.getName());
}
public static void m2(Person P){
System.out.println(P.toString());
}
public static void m3(Person p){
if (p instanceof Student){
((Student)p).displayObject();
}else if(p instanceof Employee){
((Employee)p).displayObject();
}else{
System.out.println(p.getName()+":沒有被定義為學生或者僱員!");
}
}//如果p是Student類或者Employee類的例項,分別呼叫它們的displayObject()
public static void main(String[] args){
Person p1 = new Student("morethansea","18373163669",freshman);
Person p2 = new Employee("Steven","18354643537",2000,new Mydate(2012,12,2));
Person p3 = new Person("Curry","14434643537");
m2(p1);
m2(p2);
m2(p3);
m1(p1);
m1(p2);
m1(p3);
m3(p1);
m3(p2);
m3(p3);
}
}
//實驗截圖: