JAVA对象clone方法代码实例解析

这篇文章主要介绍了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语言向我们隐瞒了实现细节,又是一个开后门的语法,像包装类可以使用运算符直接运算一样无耻

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持html中文网。

以上就是JAVA对象clone方法代码实例解析的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » Java