问题:
'clone()' has protected access in 'java.lang.Object'
原因:
1.首先找见Object类,查看clone方法,方法的访问修饰符为protected
2.再搞清protected访问修饰符的权限,大家都知道protected修饰的方法和变量权限,区别在于子类和父类是否在同个一包
1)子类与父类在同一包中:被声明为 protected 的变量、方法和构造器能被同一个包中的任何其他类访问
2)子类与父类不在同一包中:在子类中,子类实例可以访问其从基类继承而来的 protected 方法,但是不能访问父类实例的protected方法。
3.Sub类和Test类虽然都是Object的子类,但是因为clone()方法是protected的,而且Test和Object不在一个包下,因此Test只能访问自身从父类(这个例子中也就是Object)继承的受保护方法(也就是clone()方法)。但是Sub类和Test类是继承关系,两个类不在同一包下,所以在子类中,用父类实例不能调用protected方法,可以在Test类中访问Clone方法。
解决方法:
1.在Test类中访问Clone方法
2.在Test类中重写Clone方法,将访问权限修改为public,在Sub类中就可以访问了
3.实现Cloneable接口,实际上Cloneable是一个标记接口,没有什么内容
注意:Object中的clone方法是浅克隆