JAVA对象clone方法代码实例解析
1.Cloneable接口
这个接口一个方法都没有,但是要使用clone方法,就必须实现这个接口,否则抛出CloneNotSupportedException异常
2.clone方法的返回值
先附上两个类代码
packagepojo; /** *@Author:ZGQ *@Date:2020/3/1122:12 *@Version:1.0 */ publicclassPersonimplementsCloneable{ Stringname; intage; publicPerson(Stringname,intage){ this.name=name; this.age=age; } @Override protectedObjectclone()throwsCloneNotSupportedException{ System.out.println(super.clone().getClass()); Personp=(Person)super.clone(); p.name=this.name; p.age=this.age; returnp; } }
packagepojo; /** *@Author:ZGQ *@Date:2020/3/1122:21 *@Version:1.0 */ publicclassGirlextendsPerson{ charcup; publicGirl(Stringname,intage,charcup){ super(name,age); this.cup=cup; } @Override publicObjectclone()throwsCloneNotSupportedException{ System.out.println(super.clone().getClass()); Girlgirl=(Girl)super.clone(); girl.cup=this.cup; returngirl; } @Override publicStringtoString(){ 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语言向我们隐瞒了实现细节,又是一个开后门的语法,像包装类可以使用运算符直接运算一样无耻
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。