标签:void 修饰符 birt 而不是 创建 date obj 类的方法 clone
首先,protected的作用是让方法仅能被自身和子类调用。clone目的在于深拷贝,如果被拷贝的类中包含其他类,也必须被深拷贝,如下所示
class Person{ int salary; String name; Date birthDate; }
然而,当我们调用的clone函数时Object中的时,它只好保证调用此函数的类的对象被深拷贝,其包含的类的对象只是浅拷贝。这时,如果属性中只包含基础类型和不可被修改的类对象还好(如int和String),改变a的值并不会影响b的值。
class Person{ int salary; String name; Date birthDate; public static void main(String[] args){ Person a = new Person(12,"a",new Date()); Person b = a.clone(); } }
但是,当我们改变a中birthdate的值时,b中的birthdate也会随之改变,这显然违背了clone的初衷。这时我们就需要重写clone,并将其访问修饰符改做public,以便外部类访问。那么这里就出现了第二个问题。
其实上面已经给出了答案,为了让外部类也能访问clone方法,我们需要将其访问修饰符改为public。但是如果是重写父类的方法,其访问修饰符不能超过有父类访问修饰符的范围大小,所以不可行。
一句话总结:为了实现让外界可访问且保证是深拷贝的clone方法,我们将Object的clone设置为protected并且创建接口Cloneable
标签:void 修饰符 birt 而不是 创建 date obj 类的方法 clone
原文地址:https://www.cnblogs.com/Oliver1993/p/11470505.html