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.clonesuper.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();
}
}