Java 如果所有类都扩展对象,为什么可以';他们不都叫克隆人吗

Java 如果所有类都扩展对象,为什么可以';他们不都叫克隆人吗,java,Java,这会给出一个错误,表示它受到保护。对象的任何子类都不能调用该方法 因为clone()是类对象中受保护的方法 如果你想公开访问clone(),你需要在你的类中重写这个方法 class Main { public static void main(String[] args) { new Cloned().clone(); } } class Cloned implements Cloneable {} 这里的问题是Main没有扩展Cloned。目前,Mai

这会给出一个错误,表示它受到保护。对象的任何子类都不能调用该方法

因为
clone()
是类对象中受保护的方法

如果你想公开访问
clone()
,你需要在你的类中重写这个方法

class Main
{
    public static void main(String[] args)
    {
        new Cloned().clone();
    }
}
class Cloned implements Cloneable {}

这里的问题是
Main
没有扩展
Cloned
。目前,
Main
可以调用
Main.clone
,但不能调用
clone.clone


clone
方法在
Object
中声明的事实在这里并不重要。除了公共方法外,类只能调用自己继承的方法。这包括来自其超类的受保护方法,但不包括其他(超)类的受保护方法。

我现在开始看到这一点,我认为他们在讨论受保护方法时强调得不够。实际上这是一个很好的问题,因为当你草率地说“受保护的方法可以由子类调用”时,正如你所发现的,这实际上并不是全部事实:-)super是如何实现的。与此相关,如果super不是那种类型,为什么可以调用super.clone
super.method()
不是真正相关的。如果
B扩展了A
,并且
A
B
都定义了一个
方法()
,那么
B
可以通过
super.method()
调用
A
方法()
。如果它是由类
B
继承的话!:-)
@override
public Object clone()
{
    return super.clone();
}
    class Main implements Cloneable
    {
         public static void main(String[] args)
    {

    }


       @Override
    protected Object clone() throws CloneNotSupportedException {
        // TODO Auto-generated method stub
        return super.clone();
    }


}