Resumen de aprendizaje de Java: 34 (clonación de objetos)

Clonación de objetos

La clonación de objetos es una operación de copia en un objeto. En la clase Object, hay un método clone () para la operación de clonación de objetos. El método es el siguiente:

protected Object clone() throws CloneNotSupportedException;

Hemos notado:
1. Este método usa derechos de acceso protegidos, de modo que cuando el objeto se genera a partir de diferentes paquetes, no se puede invocar el método clone () en la clase Object, por lo que es necesario anular el método clone () en la subclase para completar normalmente. Operación de clonación:
2. Se lanza una "CloneNotSupportedException" (excepción de clonación no admitida) en el método clone (). Esto se debe a que no todos los tipos de objetos se pueden clonar, por lo que para distinguir qué objetos se pueden clonar en Java, Proporciona una interfaz clonable específicamente, la clase para clonar el objeto debe implementar la interfaz clonable.

Nota: La interfaz clonable no tiene ningún método, esta interfaz pertenece a la interfaz de identificación .
Con respecto a la interfaz de identificación: La interfaz de identificación es una interfaz sin ningún método y atributo. La interfaz de identificación no tiene requisitos semánticos para la clase que la implementa, solo indica que la clase que la implementa pertenece a un tipo específico.

Ejemplo: Implementar operación de clonación

package Project.Study.ObjectCloning;

class Book implements Cloneable{	//此类对象可以被克隆
    private String title;
    private double price;
    public Book(String title,double price){
        this.title=title;
        this.price=price;
    }

    public void setTitle(String title) {
        this.title = title;
    }
    @Override
    public String toString(){
        return "书名:"+this.title+",价格:"+this.price;
    }
    //由于此类需要对象克隆操作,所以才需要进行方法的覆写
    @Override
    public Object clone() throws CloneNotSupportedException{
        return super.clone();	//调用父类的克隆方法
    }
}
public class Test1 {
    public static void main(String[]args) throws Exception {
        Book book1=new Book("Java",79);	//实例化对象
        Book book2=(Book)book1.clone();	//克隆对象,开辟新的堆内存空间
        book2.setTitle("C++");			//修改克隆对象属性,不影响其他对象
        System.out.println(book1);
        System.out.println(book2);
    }
}
//结果:
//书名:Java,价格:79.0
//书名:C++,价格:79.0(克隆对象)

El programa anterior utiliza el contenido del objeto book1 para clonar un nuevo objeto de clase Book book 2. Dado que estos dos objetos ocupan un espacio de memoria dinámico diferente, no se afectarán entre sí.

49 artículos originales publicados · Me gustó 25 · Visitas 1512

Supongo que te gusta

Origin blog.csdn.net/weixin_45784666/article/details/105225366
Recomendado
Clasificación