摘于《JAVA2核心技术第1卷》p618 - p620。具体见代码:
package test.serializable;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class ObjectFileTest {
public static void main(String[] args){
Manager boss = new Manager("Carl Cracker",80000,1987,12,15);
boss.setBonus(5000);
Employee[] staff = new Employee[3];
staff[0] = boss;
staff[1] = new Employee("Harry Hacker",50000,1989,10,1);
staff[2] = new Employee("Tony Tester",40000,1990,3,15);
try{
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("employee.dat"));
out.writeObject(staff);
out.close();
ObjectInputStream in = new ObjectInputStream((new FileInputStream("employee.dat")));
Employee[] newStaff = (Employee[])in.readObject();
in.close();
for(Employee e : newStaff)
System.out.println(e);
}catch(Exception e){
e.printStackTrace();
}
}
}
package test.serializable;
import java.io.Serializable;
import java.util.Date;
import java.util.GregorianCalendar;
public class Employee implements Serializable{
private String name;
private double salary;
private Date hireDay;
public Employee() {}
public Employee(String n,double s,int year,int month,int day) {
name = n;
salary = s;
GregorianCalendar calendar = new GregorianCalendar(year,month - 1,day);
hireDay = calendar.getTime();
}
public String getName() {
return name;
}
public double getSalary() {
return salary;
}
public Date getHireDay() {
return hireDay;
}
public void raiseSalary(double byPercent){
double raise = salary * byPercent / 100;
salary += raise;
}
@Override
public String toString(){
return this.getClass().getName()
+ "[name=" + name
+ ",salary=" + salary
+ ",hireDay=" + hireDay
+ "]";
}
}
package test.serializable;
public class Manager extends Employee{
private double bonus;
public Manager(String n,double s,int year,int month,int day) {
super(n,s,year,month,day);
bonus = 0;
}
@Override
public double getSalary(){
double baseSalary = super.getSalary();
return baseSalary + bonus;
}
public void setBonus(double bonus) {
this.bonus = bonus;
}
public String toString(){
return super.toString()
+ "[bonus=" + bonus
+"]";
}
}