小编给大家分享一下JAVA对象clone方法的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
1.Cloneable接口
这个接口一个方法都没有,但是要使用clone方法,就必须实现这个接口,否则抛出CloneNotSupportedException异常
2.clone方法的返回值
先附上两个类代码
package pojo;
/**
* @Author : ZGQ
* @Date : 2020/3/11 22:12
* @Version : 1.0
*/
public class Person implements Cloneable{
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
protected Object clone() throws CloneNotSupportedException {
System.out.println(super.clone().getClass());
Person p = (Person) super.clone();
p.name=this.name;
p.age=this.age;
return p;
}
}
package pojo;
/**
* @Author : ZGQ
* @Date : 2020/3/11 22:21
* @Version : 1.0
*/
public class Girl extends Person {
char cup;
public Girl(String name, int age, char cup) {
super(name, age);
this.cup = cup;
}
@Override
public Object clone() throws CloneNotSupportedException {
System.out.println(super.clone().getClass());
Girl girl = (Girl) super.clone();
girl.cup=this.cup;
return girl;
}
@Override
public String toString() {
return "Girl{" +
"cup=" + cup +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
我一开始很困惑,为什么clone方法可以将父类的实例交给子类的引用,输出一看才知道,在第一次clone时,创建的就是子类的对象
再创建一个boys类,或者直接调用Person.clone也一样,谁调用clone方法,就创建谁的实例
调用girl.clone()
调用person.clone()
调用boy.clone()
3.如果一个类没有实现Cloneable接口,那它就不可以被clone,它的子类也就不可能实现真正的深复制
多嘴一句,为什么不把clone方法定义在Cloneable中呢?
4.以上写法就是深复制的写法
5.为什么调用clone出来的是子类的实例呢?
可以显而易见的是确实这样比较合乎情理,但是java语言向我们隐瞒了实现细节,又是一个开后门的语法,像包装类可以使用运算符直接运算一样无耻
以上是“JAVA对象clone方法的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。