1.clone 方法是 object 的一个protected方法 这个看API就知道了.
2.由于 protected 方法是这样的方法,子类可以访问,同包中的类可以访问.
3.所以我们可以得出一个结论,任何类都是object的子类,任何类都可以有clone()方法.
4.当然下而的类是不对的,要clone就要覆盖clone方法的.编译时说"clone() 不可以在 java.lang.Object 中访问 protected"
5.这个一方面是可以访问protected 一方面又是不可以,道理上说不用覆盖就可以用的啊,因为子类可以访问protected
6.问题:clone方法到底怎么回事?
public class Test{
public static void main(String[] args){
Student s1 = new Student();
Student s2 = (Student)s1.clone();
}
}
class Student implements Cloneable{
int age = 18;
//此处应有一个clone()方法
}

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【fuqiang229】截止到2008-07-02 21:10:43的历史汇总数据(不包括此帖):
    发帖的总数量:9                        发帖的总分数:150                      
    结贴的总数量:8                        结贴的总分数:150                      
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:1                        未结的总分数:0                        
    结贴的百分比:88.89 %               结分的百分比:100.00%                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    楼主加油
      

  2.   

    clone 是protected 的,所以不能在非集成类访问。所以如果你要使用,必须自己写一个 
    public Object clone 供大家公开使用
      

  3.   

    Test与Object不在同一个包下Test与Student在同一个包下 Test可以访问Student的protected方法
      

  4.   

    public class Test { public static void main(String[] args) {
    Student s1 = new Student();
    Student s2 = s1.clone();
    System.out.println(s1.age);
    System.out.println(s2.age);
    }}class Student implements Cloneable {
    //覆盖了 clone 方法实现了克隆功能的类必须实现 Cloneable 这一标记接口 public int age = 18; //此处应有一个clone()方法  public Student clone() {
    //首先覆盖超类 Object 提供的 clone 方法,然后扩大它的访问级别(由 protected 到 public)
    //然后将方法返回值类型具体化,这个也叫方法返回值协变
    Student s = null;
    try {
    s = (Student) super.clone();
    } catch (CloneNotSupportedException e) {
    //正常情况下此异常不可能发生
    }
    return s;
    }}
      

  5.   

    这里重写clone方法时为什么要用super?
      

  6.   


    利用超类 Object 的 clone 方法完成浅表复制。