我定义这么一个类:
class TreeNode{
   String str1;
   String str2;
   TreeNode treeNode1;
   TreeNode treeNode2;
      TreeNode(){
      str1=null;
      str2=null;
      treeNode1=null;
      treeNode2=null;
   }
   
}
在其他类中
class function{
   TreeNode node =new TreeNode();
   node.str1="666";
   node.str1="777";
   TreeNode node2=node的副本;
}请教下,如何在TreeNode中定义克隆函数才能完全复制其对象???

解决方案 »

  1.   

    写个方法,每个参数都clone一遍
      

  2.   

    TreeNode node2=node的副本;
    这个根本不是复制,只是引用而已,相当于指针的传递.对象类型赋值都是传递指针,值类型是拷贝赋值的(int,string,char等原始值)
      

  3.   

    你要覆盖重写TreeNode的clone方法,在方法里面进行拷贝复制值,
    这样是完美的解决方案!String str1;
      String str2; 
    string值要一个一个copy过去的哦
      

  4.   

    问题解决了,主要是深度克隆,按照如下方法就行:
    class TreeNode implements Cloneable { 
      String str1; 
      String str2; 
      TreeNode treeNode1; 
      TreeNode treeNode2; 
        TreeNode(){ 
          str1=null; 
          str2=null; 
          treeNode1=null; 
          treeNode2=null;   public OBject clone(){
        TreeNode obj = (TreeNode)super.clone();
        if (obj.treeNode1!=null)
           obj.treeNode1=(TreeNode)obj.clone(); 
        if (obj.treeNode2!=null)
           obj.treeNode2=(TreeNode)obj.clone();      return obj
       }
      } 
    在其他类中 
    class function{ 
      TreeNode node =new TreeNode(); 
      node.str1="666"; 
      node.str1="777"; 
      TreeNode node2=(TreeNode )node1.clone();//node2就是node1的完全副本 

    呵呵,我刚开始没有判断空,结果老是出现问题,还以为是方法不对呢!!!!
      

  5.   

    public class Treenode {

      String str1; 
      String str2; 
      Treenode treeNode1; 
      Treenode treeNode2; 
         Treenode(){ 
          str1=null; 
          str2=null; 
          treeNode1=null; 
          treeNode2=null; 
      }
      
    }
    如果你的意思是让node2被创建时和node一样直接就可以
    Treenode node2 =node;
    若有其他要求继续提出。
      

  6.   

      public TreeNode clone() {
      TreeNode newNode = new TreeNode();
          newNode.str1 = this.str1;
          newNode.str2 = this.str2;
          if (this.treeNode1!=null)
      newNode.treeNode1 = this.treeNode1.clone();
          if (this.treeNode2!=null)
      newNode.treeNode2 = this.treeNode2.clone();
       return newNode;
      }
    和lz是一样的 我们项目正在做树的深度克隆,学习了一下。