package com.sjms._04_创建_原型模式;
/**
* 原型模式(Prototype)
* 实现方式:
* 需要被克隆的 class类, 重写Object中的clone()方法,并实现Cloneable接口(否则报错 CloneNotSupportedException)
* 注意:
* 1.被克隆对象.clone()出的对象,是被克隆对象的当前状态
* 2.被克隆对象 如果返回的值是 super.clone(); 此时属于浅拷贝
* <p>
* 浅拷贝
* 1)成员变量是,基本数据类型,此时浅拷贝是值传递。其中一个对象的值修改后,不会影响到另一个对象的值。
* 2)成员变量是,引用数据类型,比如:数组、类的对象。此时浅拷贝是引用传递,也就是只是将该成员变量的引用值(内存地址)复制一份给新的对象。两个对象中的该成员变量执行的是同一个地址,其中一个对象的值修改后,另一个对象的值也会改变。
*/
public class _Test_浅 {
public static void main(String[] args) throws CloneNotSupportedException {
//
Yang_浅 yang = new Yang_浅("001", 1);
System.out.println("原始羊-姓名:" + yang.name);
System.out.println("原始羊-地址:" + yang);
System.out.println();
//
Yang_浅 clone_yang = (Yang_浅) yang.clone();
System.out.println("克隆羊-地址:" + clone_yang);
System.out.println("克隆羊-姓名:" + clone_yang.name);
System.out.println();
//
System.out.println("修改原始羊姓名为:小明");
yang.setName("小明");
System.out.println();
//
System.out.println("原始羊-姓名:" + yang.name);
System.out.println("克隆羊-姓名:" + clone_yang.name);
System.out.println();
//
System.out.println("原始羊-数组内容:" + yang.list);
System.out.println("克隆羊-数组内容:" + clone_yang.list);
System.out.println();
//
System.out.println("原始羊数组添加内容 MMM ");
yang.add();
System.out.println();
//
System.out.println("原始羊-数组内容:" + yang.list);
System.out.println("克隆羊-数组内容:" + clone_yang.list);
System.out.println();
}
}
评论5