class AClone {
    
}
public class TestClone {    public static void main(String[] args){
TestClone tc = new TestClone();
try {
    tc.clone(); //为什么此处可以clone........
} catch (CloneNotSupportedException e) {
    e.printStackTrace();
}

AClone ac = new AClone();
ac.clone();//为什么此处不可以clone呢?哪个解释一下
    }
}

解决方案 »

  1.   

    clone()来自Object类,并且它是protected的
      

  2.   

    clone()是object的protected方法,用于复制一份调用该方法的对象。
      

  3.   

    public interface Cloneable此类实现了 Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制。 
    如果在没有实现 Cloneable 接口的实例上调用 Object 的 clone 方法,则会导致抛出 CloneNotSupportedException 异常。 
    按照惯例,实现此接口的类应该使用公共方法重写 Object.clone(它是受保护的)。
      

  4.   

    可能原贴没有说明白,我困惑的地方不是在要怎么去Clone(实现Cloneable接口和覆盖clone方法)之类的。我的疑问具体在,任何类都继承自Object
    Object类中的clone方法是protected的,
    那类AClone和类TestClone都应该继承了此方法,都可以在建创这个对象的时候访问到此方法:
    如:
    TestClone类创建一个对象时,句柄tc可以调用clone方法(只须捕获异常即可编译通过)
    而AClone类创建一个对象时,则提示clone方法不可见(似乎又成了访问控制的问题)。
    为什么同样的代码会有区别呢?
      

  5.   


    class AClass implements Cloneable {
        protected void fun() {// 此方法访问控制权限和clone一致的    }
    }class AClone extends AClass implements Cloneable {}public class TestClone implements Cloneable {    public static void main(String[] args) {
    TestClone tc = new TestClone();
    AClone ac = new AClone();
    ac.fun(); // 说明protected方法还是继承过来了,为什么clone方法没有继承过来呢
    try {
        tc.clone(); // 此处编译没有问题,为什么此处可以clone........
        ac.clone(); // 此处编译有问题,为什么此处不可以clone呢?哪个解释一下
    } catch (CloneNotSupportedException e) {
        e.printStackTrace();
    }
        }
    }
      

  6.   


     protected 的方法可以在同一个包或者在其子类中可以访问!
    AClone ac = new AClone();
     ac.clone();//为什么此处不可以clone呢?哪个解释一下
    你这里不在同一个包,也没有在其子类中。建议看看的Java的权限修饰符
      

  7.   

    原因就是因为clone方法是protected的,然而你的AClone这个类是默认包访问权限的,那么你继承的方法也只能是大于包访问权限的,很显然,如果protected的方法让你继承了,那这个方法还是包内访问还是继承访问呢?这就是矛盾的了撒。不知道是否明白
      

  8.   

    请楼主注意clone的方法作用域是protected
    只能在类自己或者子类中调用......