Avatar billede mulemule Nybegynder
22. juli 2005 - 11:34 Der er 8 kommentarer og
1 løsning

Forskel på nedarvning og Interfaces

Hvad er forskellen på at lave en en abstrakt klasse, kun med abstrakte metoder og properties, og så nedarve den.

Og så på at lave det samme med et Interface .

??
Avatar billede softspot Forsker
22. juli 2005 - 11:39 #1
Et interface implementerer som sådan ikke noget funktionalitet, men er blot en kontrakt med omverdenen om hvad der kan forventes at findes af funktionalitet i din klasse. Desuden kan man nedarve flere interfaces, men (med undtagelse af C++) kun en superklasse...
Avatar billede arne_v Ekspert
22. juli 2005 - 11:54 #2
principielt ingen

C++ har f.eks. ikke interfaces, så der laver man bare abstrakte klasser med
udelukkende abstrakte metoder (pure virtual metoder i C++ terminologi)

der er så den lille praktiske detalje at i C# kan du kun arve fra en klasse men
implementere flere interfaces, så hvis du arver fra en 100% abstrakt klasse har du
brugt din eneste arve mulighed og kan ikke arve fra andet, derfor er interfaces
praktisk

derudover udsender brug af interfaces nogle lidt andre signaler: ikke bare er der
ingen funktionalitet nu - der vil heller aldrig blive implementeret funktionalitet
Avatar billede mulemule Nybegynder
22. juli 2005 - 14:36 #3
Men der er noget andet jeg ikke forstår helt.

Jeg har en klasse A, som bliver nedarvet af X og Y . Jeg vil gerne have en metode i A som bliver overskrevet i både X og Y, med forskellige funktionalitet, denne metode skal aldrig udføres direkte på A. Hvordan gør jeg det, jeg kan jo ikke erklærre den abstract, uden at hele klassen er abstract.
Avatar billede arne_v Ekspert
22. juli 2005 - 15:16 #4
det er enten eller

enten er A abstract, kan ikke instantieres og alle sub klasser skal
implementere metoder

eller så er A ikke abstrakt, kan instantieres og har metoden
Avatar billede runesoft Nybegynder
25. juli 2005 - 08:48 #5
Forskllen er at din nedarvene klasser godt kan implementere flere interfaces, men kun én klasse.

Du kan f.eks. lave et interface med den metode X og Y skal implementere, og så lade X og Y implementere dit nye interface. Det giver ingen mening at definere metoden på A, da A ikke skal have metoden.
Avatar billede mulemule Nybegynder
26. juli 2005 - 15:39 #6
OK, så.

Jeg synes nu stadig at det ville kunne være brugbart at kunne erklærre nogen metoder abstrakt uden at hele klassen var abstrakt , men jeg klarer mig uden.
(jeg kaster bare en exception hvis den metode jeg synes skulle være abstrakt bliver kaldt). Jeg ved godt at mit design skyldes at jeg ikke har fattet OOP 100% men jeg håber det går op for mig hen ad vejen hvordan jeg burde gøre.

Tak iken.
Avatar billede arne_v Ekspert
26. juli 2005 - 18:11 #7
pussig point uddeling
Avatar billede softspot Forsker
26. juli 2005 - 20:03 #8
Navnesammenfaldet er så stort at det er svært at skelne os fra hinanden ;)
Avatar billede arne_v Ekspert
26. juli 2005 - 20:12 #9
:-)
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
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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