1. 程式人生 > >繼承與多型的一個簡單例項

繼承與多型的一個簡單例項

程式結構:
父為Person類,Person類個子類Student和Employee,Employee類又有兩個子類,Staff和Faculty。

繼承即子類可以繼承父類的資料域和方法:

Student類和Employee類繼承了Person類的資料域name,address phoneNumber E_mail className 以及他們的set方法和get方法。同時Emloyee類中聲明瞭新的資料域office,wage,date以及他們的set get方法。Student類有新的grade資料域和方法。
Staff和Faculty類繼承了Employee類中的所有方法,包括從Person類中繼承來的方法,同時有定義了自己的新方法。
同時,子類通過super呼叫了父類設定日期的構造方法和toString方法。

多型:
TestPerson類中建立了Student,Staff和Faculty型別的物件
在呼叫toString時,每個類都有自己對toString方法的實現(子類覆蓋了父類的toString方法),最終的輸出結果取決於物件的型別,體現了動態繫結。

在這裡插入圖片描述


package person;
//父類
public class Person {
	protected String name ;                       //姓名
	protected String address;                      //地址
	protected String phoneNumber;
//電話號碼 protected String E_mail; //電子郵件 protected String className; //類名,即學生、職員、教員 public void setE_mail() { this.E_mail=E_mail; } public String getE_mail() { return E_mail; } public void setPhoneNumber() { this.phoneNumber=
phoneNumber; } public String getPhoneNumber() { return phoneNumber; } public void setClassName() { this.className=className; } public String getClassName() { return className; } public void setAddress() { this.address=address; } public String getAddress() { return address; } public void setName() { this.name=name; } public String getName() { return name; } public String toString() { return getClassName()+" \n"+getName()+" \nphnone number is:\n"+getPhoneNumber()+" \nE-mail is :\n"+getE_mail()+" \naddress is :\n"+getAddress(); } }
package person;
public class Student extends  Person{
	protected String grade;
	final static int  RRESHMAN=1;
	final static int SOPHOMORE=2;
	final static int JUNIOR=3;
	final static int SENIOR=4;
	public void setGrade() {
		this.grade=grade;
	}
	public String getGrade() {
		return grade;
	}
	public Student(String className,String name,String grade,String phoneNumber,String E_mail,String address) {
		this.className=className;
		this.name=name;
		this.grade=grade;
		this.phoneNumber=phoneNumber;
		this.E_mail=E_mail;
		this.address=address;
	}
    public String toString() {
    	return super.toString()+"\ngrade is :\n"+grade;
    }

}


package person;


public class Employee extends Person {
	protected String office;                        //辦公室
	protected double wage;                           //工資
    MyDate date;                                    //MyDate的一個物件,作用是在employee裡面建立一個構造方法,使在子類中能呼叫他的構造方法
	
    public Employee(int year,int month,int day) {
    	 this.date=new MyDate(year,month,day);
    
    }
    public void setOffice() {
    	this.office=office;
    }
    public String getOffice() {
    	return office;
    }
    public void setWage() {
    	this.wage=wage;
    }
    public double getWage() {
    	return wage;
    }
    
 
    
    public String toString() {
    	return super.toString()+"\noffice is :\n"+getOffice()+"\nwage is :\n"+getWage()+"\nthe year is :\n"+MyDate.getYear()+
    			"\nthe month is:\n"+MyDate.getMonth()+"\nthe day is:\n"+MyDate.getDay();
    }
    
   

}


package person;
//教員
public class Faculty extends Employee {

	protected String rank;                //等級
	protected String time;                //工作時間如9:00-13:00

	public void setRank() {
		this.rank=rank;
	}
	public String getRank() {
		return rank;
	}
	public void setTime() {
		this.time=time;
	}
	public String getTime() {
		return time;
	}
	public Faculty(String className,String name,String rank,String phoneNumber,String E_mail,String address,String office,double wage,String time,int year,int month,int day){
		    super(year,month,day);
		    this.className=className;
	    	this.name=name;	    
	    	this.rank=rank;
	    	this.phoneNumber=phoneNumber;
	    	this.E_mail=E_mail;
	    	this.address=address;
	    	this.office=office;
	    	this.wage=wage;
	    	this.time=time;
	}
	
	
    public String toString() {
    	return super.toString()+"\nrank is :\n"+rank+"\nthe work time is:\n"+time;
    }
	


}


package person;

//職員

public class Staff extends Employee {

	protected String staffTitle;                //職位
	
	public void setStaffTitle() {
		this.staffTitle=staffTitle;
	}
	public String getStaffTitle() {
		return staffTitle;
	}
	public Staff(String className,String name,String staffTitle,String phoneNumber,String E_mail,String address,String office,double wage,int year,int month,int day) {
		super(year,month,day);
		this.className=className;
		this.name=name;
		this.staffTitle=staffTitle;
		this.phoneNumber=phoneNumber;
		this.E_mail=E_mail;
		this.address=address;
    	this.name=name;

    	this.office=office;
    	this.wage=wage;
    	
	}
	public Staff() {                   //無參的構造方法,預設方法
		this("staff","lisi","cleaner","1527319","[email protected]","北京市","機械院203",3000,2015,3,12);
	}
    public String toString() {
    	return super.toString()+"\nstaffTitle is :\n"+staffTitle;
    }

}


package person;

public class MyDate {

	    	public static int  year;
	    	public static int  month;
	    	public static int day;
	    	public MyDate(int year,int month,int day) {
	    		this.year=year;
	    		this.month=month;
	    		this.day=day;
	    	}
	    	public void setYear() {
	    		this.year=year;
	    	}
	    	public static int getYear() {
	    		return year;
	    	}
	    	public void setMonth() {
	    		this.month=month;
	    	}
	    	public static int getMonth() {
	    		return month;
	    	}
	    	public void setDay() {
	    		this.day=day;
	    	}
	    	public static int getDay() {
	    		return day;
	    	}
}

package person;


public class TestPerson {
	public static void main(String[] args) {
		m(new Student("student","zengmeng","junior","12345","[email protected]","四川成都"));           //初始化學生物件
		m(new Faculty("Faculty","zhangsan","associate professor","139822","[email protected]","湖南長沙","環境院408",10000,"9:00-18:00",2018,6,20));
		m(new Staff());         //初始化職員物件,無參構造
	
	}
	public static void m(Object x) {
		System.out.println(x.toString());		  //輸出
	}
}



執行結果

在這裡插入圖片描述