前言
红警2尤里复仇中,有个一个非常强大作战兵种——尤里,可以通过心灵控制将敌方兵种进行心理控制,为我方阵营所用,由于一个尤里最多只能控制三个作战单位,所以研究出了一种克隆设计,可以克隆多个尤里,实现对敌方多个作战单位的控制。
浅拷贝
那这和浅拷贝有什么关系呢?
在科技不先进的情况下(假设),尤里和尤里复裂人有这样一个特性,他们之间会存在感同身受,试想,如果有几十万个尤里复裂人,某一个尤里复裂人一旦战死,意味着整个军区的覆灭(尤里只有一个,复裂人可以有无限个),带来巨大的损失,这便类似于浅拷贝,修改,任何一个被拷贝的对象的属性(亦或是主体),都会影响到其他对象;
代码如下:
//状态
class Action{
public String action = "正常";
}
//尤里
class Yuri implements Cloneable{//标记被克隆的尤里真身
public String name = "尤里";
public Action action = new Action();
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
public String toString() {
return "Yuri{" +
"name='" + name + '\'' +
", action='" + action.action + '\'' +
'}';
}
}
public class Test {
public static void main(String[] args) throws CloneNotSupportedException {
Yuri yuri = new Yuri();
Yuri yuriclone1 =(Yuri) yuri.clone();//要抛一个异常,由于是Object类,向下转型要进行强制类型转化
Yuri yuriclone2 =(Yuri) yuri.clone();
System.out.println(yuri);
System.out.println(yuriclone1);
System.out.println("--------------分割线--------------");
yuri.action.action = "受伤";//一个受伤,其他跟着受伤
System.out.println(yuri);
System.out.println(yuriclone1);
System.out.println(yuriclone2);
}
}
运行结果:
分析:
深拷贝
那这和深拷贝有什么关系呢?
在科技先进的情况下(假设),在克隆时不会造成尤里与其他复裂人相关联,感同身受,即使一个复裂人原地去世,也不影响其他复裂人以及尤里真身进行作战,这便类似于深拷贝,修改,任何一个被拷贝的对象的属性(亦或是主体),都不会影响到其他对象;
代码如下:
//状态
class Action implements Cloneable{
public String action = "正常";
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
//尤里
class Yuri implements Cloneable{//标记被克隆的尤里真身
public String name = "尤里";
public Action action = new Action();
@Override
protected Object clone() throws CloneNotSupportedException {
Yuri tmpclone = (Yuri) super.clone();//对尤里的克隆
tmpclone.action = (Action) this.action.clone();//对状态的克隆
return tmpclone;
}
@Override
public String toString() {
return "Yuri{" +
"name='" + name + '\'' +
", action='" + action.action + '\'' +
'}';
}
}
public class Test {
public static void main(String[] args) throws CloneNotSupportedException {
Yuri yuri = new Yuri();
Yuri yuriclone1 =(Yuri) yuri.clone();//要抛一个异常,由于是Object类,向下转型要进行强制类型转化
Yuri yuriclone2 =(Yuri) yuri.clone();
System.out.println(yuri);
System.out.println(yuriclone1);
System.out.println(yuriclone2);
System.out.println("--------------分割线--------------");
yuri.action.action = "受伤";//一个受伤,其他跟着受伤
System.out.println(yuri);
System.out.println(yuriclone1);
System.out.println(yuriclone2);
}
}
运行结果:
分析:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/129905.html