1.使用clone方法的类必须先实现Cloneable接口,不然clone方法会直接返回CloneNotSupportedException不支持克隆的异常
2、实现Cloneable接口的类应该使用公共方法重写 Object.clone(它是受保护的)。某个对象实现了此接口就克隆它是不可能的。即使 clone 方法是反射性调用的,也无法保证它将获得成功。
3、在Java.lang.Object类中克隆方法是这么定义的:
protected Object clone()
throws CloneNotSupportedException
创建并返回此对象的一个副本。表明是一个受保护的方法,同一个包中可见。
按照惯例,返回的对象应该通过调用 super.clone 获得。
详见关于clone的API文档
用extends继承,直接使用父类的变量,缺点:不能继承其他类
用getter,通过getter获取变量,缺点:过多setter和getter容易破坏代码的可维护性
创建类的实例,然后调用实例的值,缺点:如果长时间不用实例化的对象,会被自动回收
适用reflection反射机制,导入java.lang.reflect包,以此来调用类里面的变量,缺点:开发环境不可以有安全限制,可移植性差
用接口,把变量放到一个接口里面,然后共享数据的类实现这个接口,缺点:暂时没想到
直接无视1楼实现Cloneable接口,重载clone方法即可
public class A implements Cloneable {
public String name
public Object clone() {
A o = null
try {
o = (A) super.clone()
} catch (CloneNotSupportedException e) {
e.printStackTrace()
}
return o
}
}