/*
* 練習問題3.9 p.92
* 何個かのVehicleオブジェクトを配列に保持できるGarageクラスを作成しなさい。GarageをCloneable型にして、
* 適切なcloneメソッドを書きなさい。cloneをテストするGarage.mainメソッドを書きなさい。
*/
package ch03.ex03_09;
public class Garage implements Cloneable
{
Vehicle VehicleList[];
public Garage clone()
{
try
{
Garage newGarage = (Garage) super.clone();
newGarage.VehicleList = new Vehicle[2];
for (int i = 0; i < VehicleList.length; i++)
{
newGarage.VehicleList[i] = VehicleList[i].clone();
}
return newGarage;
}
catch (CloneNotSupportedException e)
{
// 起こり得ない。
throw new InternalError(e.toString());
}
}
/**
* @param args
*/
public static void main(String[] args)
{
Garage test1 = new Garage();
test1.VehicleList = new Vehicle[2];
test1.VehicleList[0] = new Vehicle("test1");
test1.VehicleList[1] = new Vehicle("test2");
Garage test2 = test1.clone();
test2.VehicleList[0].setOwner("test1 -> modified");
System.out.println(test1.VehicleList[0].getOwner());
System.out.println(test1.VehicleList[1].getOwner());
System.out.println(test2.VehicleList[0].getOwner()); // 元のオブジェクトに影響を与えないことを確認
System.out.println(test2.VehicleList[1].getOwner()); // コピーできていることを確認
System.out.println("used max id: " + Vehicle.showCurrentID());
}
}