Martin Moller Pedersen wrote:
> In <zrCF8.2243$fG3.76470@news2.ulv.nextra.no> "daxi jumbo" <daxi@jumbo.no> writes:
>
> >How do I override method clone() (of class Object) in my user defined class
> >C?
> >Which statements are needed, and where do i put these?
>
> Hej, Alle her forstaar norsk, saa du behoever ikke at skrive paa engelsk
>
> Det er nok at skrive
> class C implements Cloneable
>
> Der er _ikke_ brug for en copy constructor eller at overskrive clone-metoden.
Hvorfor ikke?? Den autoriserede måde at understøtte kloning på
er vist nogenlunde følgende:
1) Kald clone() for forælderklassen, så Object.clone() laver en
bit for bit kopi af felter i objektet.
2) Hvis objektet indeholder referencer, vil disse nu pege på samme
objekter som originalen og skal sættes til at pege på kloner af
disse (kloner er separate kopier og deler ingenting).
// altså
class A implements Cloneable
{
private B b = new B();
private int x = 0;
public Object clone()
{
try
{
A a = (A)super.clone();//bit for bit kopi
a.b = (B)b.clone();//b feltet skal ikke pege på det samme
// som før, men på et klon af b
// x peger ingen steder, så bitkopien af denne er ok
return a;
}
catch( CloneNotSupportedException e )
{
// fejl...
}
}
}
Læg mærke til at B skal implementere Cloneable og
det skal alle Bs referencer også, osv. Ligeledes med
As forælderklasse - det kan blive en ganske
omfattende process at implementere clone() på en
enkelt klasse..
Ulrik Magnusson