Mega Code Archive

 
Categories / Java / Class
 

This program demonstrates cloning

/*    This program is a part of the companion code for Core Java 8th ed.    (http://horstmann.com/corejava)    This program is free software: you can redistribute it and/or modify    it under the terms of the GNU General Public License as published by    the Free Software Foundation, either version 3 of the License, or    (at your option) any later version.    This program is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    GNU General Public License for more details.    You should have received a copy of the GNU General Public License    along with this program.  If not, see <http://www.gnu.org/licenses/>. */ import java.util.Date; import java.util.GregorianCalendar; /**  * This program demonstrates cloning.  * @version 1.10 2002-07-01  * @author Cay Horstmann  */ public class CloneTest {    public static void main(String[] args)    {       try       {          Employee original = new Employee("John Q. Public", 50000);          original.setHireDay(2000, 1, 1);          Employee copy = original.clone();          copy.raiseSalary(10);          copy.setHireDay(2002, 12, 31);          System.out.println("original=" + original);          System.out.println("copy=" + copy);       }       catch (CloneNotSupportedException e)       {          e.printStackTrace();       }    } } class Employee implements Cloneable {    public Employee(String n, double s)    {       name = n;       salary = s;       hireDay = new Date();    }    public Employee clone() throws CloneNotSupportedException    {       // call Object.clone()       Employee cloned = (Employee) super.clone();       // clone mutable fields       cloned.hireDay = (Date) hireDay.clone();       return cloned;    }    /**     * Set the hire day to a given date.      * @param year the year of the hire day     * @param month the month of the hire day     * @param day the day of the hire day     */    public void setHireDay(int year, int month, int day)    {       Date newHireDay = new GregorianCalendar(year, month - 1, day).getTime();              // Example of instance field mutation       hireDay.setTime(newHireDay.getTime());    }    public void raiseSalary(double byPercent)    {       double raise = salary * byPercent / 100;       salary += raise;    }    public String toString()    {       return "Employee[name=" + name + ",salary=" + salary + ",hireDay=" + hireDay + "]";    }    private String name;    private double salary;    private Date hireDay; }