天天看點

6-5 jmu-Java-03面向對象基礎-clone方法、辨別接口、深拷貝 (10 分)

**Object的clone方法可以幫助我們克隆對象。現在需編寫一個類Car包含:

1.屬性:

private String name;

private CarDriver driver;

private int[] scores;

2.無參構造函數

public Car() {
 }      

3.方法:

@Override
 public String toString() {
 return “Car [name=” + name + “, driver=” + driver + “, scores=” + Arrays.toString(scores) + “]”;
 }      

setter/getter方法與clone方法。注意:clone方法需實作對象的深度克隆。

class CarDriver {
 private String name;
 public CarDriver() {}
 //setter/getter
 //toString 
 }      
class Car implements Cloneable
{
  private String name;
  private CarDriver driver;
  private int[] scores;
  public Car() {
  }
  @Override
  public String toString() {
      return "Car [name=" + name + ", driver=" + driver + ", scores=" + Arrays.toString(scores) + "]";
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public CarDriver getDriver() {
    return driver;
  }
  public void setDriver(CarDriver driver) {
    this.driver = driver;
  }
  public int[] getScores() {
    return scores;
  }
  public void setScores(int[] scores) {
    this.scores = scores;
  }
  @Override
  protected Car clone() throws CloneNotSupportedException {
    // TODO Auto-generated method stub
    Car car = new Car();
    CarDriver D = new CarDriver();
    if(driver==null)
      D=null;
    else
      D.setName(driver.getName());
    car.setDriver(D);
    String Nm;
    if(name==null)
      Nm=null;
    else
      Nm=name;
    car.setName(Nm);
    if(scores==null)
      car.setScores(null);
    else
    {
      int c[] = Arrays.copyOf(scores, scores.length);
      car.setScores(c);
    }
    return car;
  } 
}