java 测试 克隆

public class TestClone {
public static void main(String[] args) throws CloneNotSupportedException {
Dog d = new Dog("大黄",2) ;
Dog d1 = d;
System.out.println(d.getName());
System.out.println(d1.getName());
//d 的name是 大黄;再把d的值赋给d1.所以d1的name也是大黄;

d.setName("二黄");
//调用setName方法把d的name设置成二黄,这时候d1的名字也变成了二黄。

System.out.println(d.getName()+" == "+d1.getName());
//因为大黄这个名字是在堆空间,复制的只是它的引用。d和d1都是指向大黄这个名字,所以d改变d1也会同时改变;
Dog d2 = new Dog("小黑",2);
Dog d3 = (Dog) d2.clone();  //克隆时候记得把克隆对象转为 正确的对象类型;
System.out.println(d2.name+"==="+d3.name); //输出都是小黑
d2.setName("二黑");
System.out.println(d2.name+"==="+d3.name); //d2 为小黑 ,d3没变 说明克隆成功;
}

}

class Dog implements Cloneable{  //克隆必须先实现 克隆的接口,接口没有实现的方法,是本地方法,交给操作系统去实现
String name;                                操作系统实现的效率更高;
int age;
public String getName () {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Dog(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Dog [name=" + name + ", age=" + age + "]";
}
@Override

public Object clone() throws CloneNotSupportedException {

                    return的是一个dog 但是 返回类型是 Object ,所以调用时候要转为当前对象类型    

//重写时候 方法权限为Protect 为了可以在其他地方调用此方法 改成public;
Dog dog = null;
dog = (Dog)super.clone();   //super.clone得到的是父类的类型,必须把它强转为当前的对象类型;
return dog;
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值