假如我们有一个Product类,
class Product { String name=null; //set get方法 …… }
这个类有一个对象product1
如果我们创建一个跟product1一样的对象,那么传统上应该这样:Product product2=new Product();product2.setName(product1.getName);
但是如果采用原型模式的话我们只要在原型对象里添加一个clone()函数
class Product { String name=null; //set get method …… public Product clone() { Product product=new Product(); Product.setName(this.name); Return product; } }
创建对象Product product2=product1.clone();
在java中,所有的对象都继承了Object,Object类中有一个clone()方法用来克隆对象
Class Product implements Cloneable { String name=null; //set get method …… public Product clone throws CloneNotSupportedException { return super.clone(); } }
Object中的clone执行的时候使用了RTTI(run-time type identification)的机制,动态得找到目前正在调用clone方法的那个reference,根据它的大小申请内存空间,然后进行的复制,将该对象的内存空间完全复制到新的空间中去。
所以调用super.clone() 得到的是当前调用类的副本,而不是父类的副本。