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 您可以自己对照看看。
//不要注释以下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;
}
// 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
您可以自己对照看看。