那些好像是c++里的概念啊。
java里也有吗?我真是孤陋寡闻啦。

解决方案 »

  1.   

    程序中
    //不要注释以下6行,实现浅拷贝和深拷贝
    //    public Object Clone() throws CloneNotSupportedException
    //    {
    //        CardHand c=(CardHand) super.clone();
    //不要注释以下2行,实现深拷贝
    //        c.c1=(Card) c1.clone();
    //        c.c2=(Card) c2.clone(); ????是否可以使用c.c1 c.c2直接赋值?他们是private
    //        return c;
    //    }
    public Object clone() throws CloneNotSupportedException
        {
           Card c=(Card) super.clone();
           ??这个地方为什么不给c的两个private(suit,value)进行显示赋值?
           return c;
        }
      

  2.   

    ---------------
    //        c.c1=(Card) c1.clone();
    //        c.c2=(Card) c2.clone(); ????是否可以使用c.c1 c.c2直接赋值?他们是private
    ---------------
    还在CardHand类内部,所以可以直接赋值。---------------
    Card c=(Card) super.clone();
           ??这个地方为什么不给c的两个private(suit,value)进行显示赋值?
           return c;
    ---------------
    为了浅拷贝,简单的说就是经过origHand.c2.setCard(DIAMOND,4)后,saveHand.c.c2还要受到origHand的影响。
    ---------------作者的答案是:
    引用拷贝:
    **** REFERENCE COPY ****BEFORE: saveHand=origHand;:      origHand is c1:A/Spades,c2:K/Spades
          saveHand is c1:A/Spades,c2:K/Spades
          newCard is  7/HeartsALTER: origHand.c1=newCard;
           origHand.c2.setCard(DIAMOND,4);
           newCard.setCard(CLUE,2);:
             
                origHand is c1:2/Clubs,c2:4/Diamonds
                saveHand is c1:2/Clubs,c2:4/Diamonds
                newCard is 2/Clubs浅拷贝:
    **** SHALLOW COPY ****BEFORE: saveHand=origHand;:      origHand is c1:A/Spades,c2:K/Spades
          saveHand is c1:A/Spades,c2:K/Spades
          newCard is  7/HeartsALTER: origHand.c1=newCard;
           origHand.c2.setCard(DIAMOND,4);
           newCard.setCard(CLUE,2);:
             
                origHand is c1:2/Clubs,c2:4/Diamonds
                saveHand is c1:A/Spades,c2:4/Diamonds
                newCard is 2/Clubs 
     
    深拷贝:
    **** DEEP COPY ****BEFORE: saveHand=origHand;:      origHand is c1:A/Spades,c2:K/Spades
          saveHand is c1:A/Spades,c2:K/Spades
          newCard is  7/HeartsALTER: origHand.c1=newCard;
           origHand.c2.setCard(DIAMOND,4);
           newCard.setCard(CLUE,2);:
             
                origHand is c1:2/Clubs,c2:4/Diamonds
                saveHand is c1:A/Spades,c2:K/Spades
                newCard is 2/Clubs 
     您可以自己对照看看。