摘于《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 +"]"; } }