Jonas Møller Larsen <jml@ifa.au.dk> skrev i en
nyhedsmeddelelse:3A9A8CF5.2A1AE42D@ifa.au.dk...
> Dennis Thrysøe wrote:
> > Men du kan løse det ved hjælp af et andet gammelt design-trick: en
> > copy-constructor.
>
> Jeg ønsker heller ikke at skulle bekymre mig om den slags detaljer ude i
> min testklasse, så jeg har løst problemet ved at definere endnu en
> klasse, som kan referere til både X- og Y-objekter. Fra testklassen
> bruger jeg så denne "kunstige" klasse.
>
> > Forestil dig hvad der ville ske hvis noget kode havde en reference til
noget,
> > som det troede var en ansat, men pludslig er det bare en person. Duer
ikke.
>
> Hvorfor ikke? Jeg synes også, det er en dårlig idee at definere kunstige
> klasser, som egentlig ikke har noget med problemet at gøre. Er det en
> begrænsning i sproget, eller er det bare mig, der tænker på den forkerte
> måde?
>
> Jeg synes f.eks., det ville være naturligt at sige
>
> Ansat a = new Ansat(parametre);
> a.fyr();
>
> hvorefter a refererer til et Person-objekt men nu kun med oplysninger om
> navn, alder osv. men ikke længere om ansættelsesforhold.
>
> --
> Jonas Møller Larsen
Jeg tror, at jeg bliver nødt til at give dig medhold i, at du ikke tænker på
den rigtige måde i denne situation.
Når et objekt bliver oprettet, vil dette objekt tilhøre samme klasse gennem
hele dets levetid.
Hvis du f.eks. har følgende klasser:
class Person{}
class Ansat extends Person {}
....og du gerne vil holde styr på både Personer og Ansatte i samme kontekst,
så bør du kun operere med referencer af klassen Person.
I Person kan du - som Dennis Thrysøe skrev - så have en copy constructor ala
følgende:
Person(Person p) {
.....
}
Som kan kopiere alle data fra et Person objekt over i et andet Person
objekt. Denne constructor vil kunne kaldes med objekter af klassen Person -
og alle subklasser af Person, f.eks. Ansat.
Dette vil - hvis jeg har forstået din hensigter korrekt - løse dit problem.
Ellers kan jeg ikke holdes personligt ansvarlig
Venlig hilsen
Jan Uhre