1. 程式人生 > >《JAVA繼承與多型》【Person、Student、Employee類】(注:此題在書上原題基礎上有修改)設計一個名為Person的類和它的兩個名為Student和Employee子類。

《JAVA繼承與多型》【Person、Student、Employee類】(注:此題在書上原題基礎上有修改)設計一個名為Person的類和它的兩個名為Student和Employee子類。

題目:【Person、Student、Employee類】(注:此題在書上原題基礎上有修改)設計一個名為Person的類和它的兩個名為Student和Employee子類。

每個人都有姓名和電話號碼。學生有年級狀態(大一、大二、大三或大四)。將這些狀態定義為常量。一個僱員有工資和受聘日期。定義一個名為MyDate的類,包含資料域:year(年)、month(月)和day(日)。將各個類的資料域進行封裝,並設定合理的讀寫訪問器。
覆蓋每個類中的toString方法,返回類名及相應的類中可以獲取的所有資訊構成的字串,如Person類的toString方法返回“Person類:姓名為* 電話為

”;Student類的toString方法返回“Student類: 姓名為 電話為 年級為**”。

在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);

}

}

//實驗截圖:

這裡寫圖片描述