Java类中为什么不能直接调用Object的clone()方法

1,217 阅读1分钟

Java类中为什么不能直接调用Object的clone()方法

在Java中所有的类都是Object的子类。

在Object类中有一个clone方法定义如下:

protected native Object clone() throws CloneNotSupportedException; 该方法的修饰符为protected,表示该方法可以在子类中调用

然后结果是调用不了

解答: clone()方法是Object里面的protected方法,只允许在同包和子类内部调用。

现在有一个类Cat,默认继承Object,所以假如你的调用测试写在Cat类里面,那么是可以调用的。

但是假如你在和Cat同包的下面写了一个Test测试类,并尝试在Test里面实例化Cat,并调用clone(),是无法调用的。

原因是,假如Cat没有重写clone()方法,Cat调用的clone()方法是Object类的,而Test类和Object不同包。你可能会问Test也是Object的子类呀?是的没错,你可以在子类内部调用自己的clone()方法,但是你不可以调用你兄弟类的clone()方法,protected的语义就是这样的。