Avatar billede JFK1234 Nybegynder
15. november 2009 - 15:24 Der er 4 kommentarer og
1 løsning

Problem med arv og polymorfi

jeg har en super klasse Dyr
og 2 klasser der arver fra den, Hund og kat

Jeg erklærer en variabel af typen Dyr og kreerer den som et Hund objekt :

Dyr mitDyr

mitDyr = new Hund();

problemet er at i Hund klassen ligger en metode, som ikke ligger i Dyr klassen. Og derved kan  jeg ikke
få kaldt den metode. Objektet er jo af typen Dyr men som nævnt kreeret som en hund.

Så hvad gør jeg,  jeg skal jo kalde den metode som kun ligger i Hund klassen. ?

Det nytter ikke noget at type caste objektet til en hund. dvs (Hund) mitDyr.

Kan man ikke type caste den på en anden måde. Altså noget lignende "mitDyr as Hund" ???
Avatar billede arne_v Ekspert
15. november 2009 - 15:27 #1
((Hund) mitDyr).HundeMetode();

bør virke fint.
Avatar billede arne_v Ekspert
15. november 2009 - 15:28 #2
Men hvis du vil bruge hunde specifikke metoder, så er:

Dyr mitDyr = new Hund();

jo en fejl - der siger du at du kun vil bruge metoder som er fælles for alle dyr.

Husk dog at du kan lave en abstrakt metode i Dyr og implementere den i Hund - det virker fint med den kode.
Avatar billede JFK1234 Nybegynder
15. november 2009 - 15:53 #3
Super Arne, det virker :
((Hund) mitDyr).HundeMetode();

Nu er jeg ny herinde. Jeg kan ikke acceptere dit svar og give dig point. Der er ikke nogen knap i dit indlæg ???
Avatar billede arne_v Ekspert
15. november 2009 - 15:56 #4
jeg skal først smide et svar
Avatar billede arne_v Ekspert
15. november 2009 - 15:58 #5
Men husk at den type cast ofte er en indikation af at noget ikke er optimalt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester