Cloning Objects 复制对象指创建一个新的与指定对象具有相 同状态的对象副本(Copy),又称为克隆对象 在程序设计中通常可以使用以下方式实现克 隆对象: (1)使用拷贝构造函数( Copy Constructor) (2)使用拷贝工厂方法( Copy Factory Method (3)使用Java语言提供的对象克隆机制
Cloning Objects • 复制对象指创建一个新的与指定对象具有相 同状态的对象副本(Copy),又称为克隆对象 • 在程序设计中通常可以使用以下方式实现克 隆对象: (1) 使用拷贝构造函数 (Copy Constructor) (2) 使用拷贝工厂方法 (Copy Factory Method) (3) 使用Java语言提供的对象克隆机制
class Sheep private string name; private float weight; private string color; public Sheep(string name, float weight, String color)t this name=name; this, weight=weight this color=color; public Sheep(sheep other) this. name=other name this weight=- other weight;拷贝构造函数 this color=other color: ∥…它方法 Sheep sheep= new Sheep(“ Xiaobai”,45,“ White”); Sheep sheep=new Sheep(sheep);
Copy Constructor • 拷贝构造函数是指以类自身的引用类型作为 参数,在构造函数中将作为参数的对象的状 态(对象的域)赋值给新建的对象 • 在拷贝构造函数中可以直接访问作为参数的 对象的任何域 class Sheep{ private String name; private float weight; private String color; public Sheep(String name,float weight,String color){ this.name=name; this.weight=weight; this.color=color; } public Sheep(Sheep other){ this.name=other.name; this.weight=other.weight; this.color=other.color; } // ……其它方法 } 拷贝构造函数 Sheep sheepA=new Sheep(“XiaoBai”,45, “White”); Sheep sheepB=new Sheep(sheepA);
class ca private String name; private String color public String getNameoi return name; y public void setName(String newName)( name=newName public String getcoloro return color; 3 public void set Color(String new Color) color=new Color 返 public static Cat copy Cat(Cat other) Cat cat=new Cato; cat setName(othergetName(); 拷贝工厂方法 cat setColor(other getcoloro; Cat catA- new Cato; catA setName(MiMi); catA. set Color(“ Black”); Cat catB=Cat. copy Cat(catA);
Copy Factory Method • 拷贝工厂方法与拷贝构造函数类似,其区别 是拷贝工厂方法是一个静态方法,该方法返 回所创建的对象副本 • 拷贝工厂方法中适用于JavaBean风格的类的 对象复制 class Cat{ private String name; private String color; public String getName() { return name; } public void setName(String newName) { name=newName; } public String getColor() { return color; } public void setColor(String newColor) { color=newColor; } public static Cat copyCat(Cat other){ Cat cat=new Cat(); cat.setName(other.getName()); cat.setColor(other.getColor()); } } Cat catA=new Cat(); catA.setName(“MiMi”); catA.setColor(“Black”); Cat catB=Cat.copyCat(catA); 拷贝工厂方法
class SuperClass( private int a; protected int b Super Class(inti, int t a=1; b class SubClass extends SuperClass( private int b SubClass(inti, int j, int k)i super(i,j b=k SubClass(subClass sub) super(sub a, sub b) 错误 b=sub. b:
Shortcoming Of Copy Constructor • 拷贝构造函数的缺点: (1) 必须针对对象的每个域进行赋值操作 (2) 无法访问父类或祖先类中私有的或被隐 藏的受保护的域 • 拷贝构造函数或拷贝工厂方法只适用于简单 的类的对象的复制 class SuperClass{ private int a; protected int b; SuperClass(int i, int j){ a=i; b=j; } } class SubClass extends SuperClass{ private int b; SubClass(int i, int j, int k){ super(i, j); b=k; } SubClass(SubClass sub){ super(sub.a, sub.b); b=sub.b; } } 错误
Java Object Cloning Mylechaniso Java语言在语言级提供了一种对象 复制机制,类的对象要支持复制, 必须使用接口 java. lang Cloneable和 类 Objectl的 Iclone0方法 EJect
Java Object Cloning Mechanism • Java语言在语言级提供了一种对象 复制机制,类的对象要支持复制, 必须使用接口java.lang.Cloneable和 类Object的clone()方法