因为每个类的直接或间接父类都是Object,因此它们都含有clone()方法,但因该方法是protected修饰的,所以我们不能在类外访问该方法。但如果我们要对一个对象进行复制,可以对clone方法进行复写,而Java中提供了两种不同的克隆方式,浅克隆(ShallowClone)和深克隆(DeepClone)。 2.3.1 浅克隆 在浅克隆中,如果源对象的成员...
数组实现Cloneable接口是因为在Java中,数组也是对象。如果数组没有实现Cloneable接口,同样也不能调用clone()...
public Test clone() { Test clone = null; try { clone = (Test) super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return clone; } } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 调用clone()方法,就可以得到与母本独立的副本吗? Object.clone()方法,...
publicclassPersonimplementsCloneable{privateStringname;privateintage;publicPerson(Stringname,intage){this.name=name;this.age=age;}publicStringgetName(){returnname;}publicintgetAge(){returnage;}publicvoidsetName(Stringname){this.name=name;}publicvoidsetAge(intage){this.age=age;}@OverridepublicObjectclo...
clone()是一个特殊的多态操作,最好是有JVM的直接支持 早期Java不支持annotation。从Java 5开始支持。 早期Java支持接口形式的“声明多继承” 早期Java不支持任何“实现多继承”(简称“多继承”)。从Java 8开始可以通过接口的default method实现。 把上述几条结合起来,就得到了Cloneable接口这个糟糕的设计。
解读:Cloneable接口没有任何方法,仅是个标志接口(tagging interface),若要具有克隆能力,实现Cloneable接口的类必须重写从Object继承来的clone方法,并调用Object的clone方法(见下面Object#clone的定义),重写后的方法应为public 的。For example(标准写法): 1
实现clone的方式: @Data @ToString class Father implements Cloneable { //1.clone的对象需要实现Cloneable接口 private String name; private int age; public Father(String name, int age) { = name; this.age = age; } @Override public Object clone() throws CloneNotSupportedException { //2.重写父类...
public interface Cloneable此类实现了 Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制。如果在没有实现 Cloneable 接口的实例上调用 Object 的 clone 方法,则会导致抛出 CloneNotSupportedException 异常。按照惯例,实现此接口的类应该使用公共方法重写 Object.clone(它是受...
If you want to use Java Object clone() method, you have to implement thejava.lang.Cloneablemarker interface. Otherwise, it will throw emp and clonedEmp HashMap == test: true Object Cloning Types 1. Shallow Cloning The default implementation of Java Object clone() method is using shallow cop...
【方法一:逐层重写clone()方法】假设存在一个订单系统,Order类包含用户信息User对象,User类又包含地址对象Address。此时需要让Order对象深拷贝,每个层级必须参与拷贝过程。操作步骤:1.在Address类中实现Cloneable接口,重写clone()方法,直接调用super.clone()2.在User类中同样实现Cloneable接口,重写clone()方法。处理...