webForumDet fria alternativet

Förstår inte fullt ut syftet med interface

Programmering

2 svar · 573 visningar · startad av Lukaspojken

Medlem sedan maj 20011 312 inlägg
Frågan#1

Oftast använder jag mig av en abstrakt klass istället för ett interface. Dels för att jag tycker att en abstrakt klass är mer flexibel och har större funktionalitet. Den enda fördel som jag märkt att ett interface har är stödet för multipla arv. Ett interface är väl också att föredra om strukturen ska vara långsiktigt fast.

Men det känns som att jag inte har förstått syftet med ett interface till fullo. Finns det något i ett interface som en abstrakt klass inte kan åstadkomma, förutom multipla arv?

Medlem sedan aug. 20003 575 inlägg
#2

Detta är ganska svårt att förklara tycker iallafall jag, men jag skall skriva det ganska kortfattat.
Det finns lite olika användningsområden.

Ett av dom är att kapsla in funktionalitet som du inte vill skall vara känt.
Ett annat är att metoder skall kunna hantera helt olika objekt men som ärver ett interface gemensamt.

Medlem sedan dec. 19996 721 inlägg
#3

Syftet med ett interface är inte, som med klassarv, att tillhandahålla gemensam funktionalitet, utan att defienera ett metodkontrakt. En klass som implementerar (man ärver inte interface) ett interface skriver under ett kontrakt som säger "Jag lovar att jag implementerar de beskrivna metoderna, men bry er för bövelen inte om hur jag gör det".

Fördelarna?

1. För det första så är det oftast just detta som är intressant i ett flexibelt system. En metod som får en IPrintable (lägg märke till att interface-namn ofta beskriver vad som kan utföras på/med klasserna, inte vad de är) skickad till sig vet att det är ett objekt som kan skrivas ut med en Print()-metod. Själva objektet kanske är av typen Car, Dog, Tree, Page eller något annat, men vi bryr oss inte om det, vi ska ju bara anropa den garanterade metoden Print().
2. Ett interface kan användas mer finkornigt och innehåller ofta bara en metod. Att använda abstrakta klasser till sådant är sannolikt slöseri med arvet.
3. Att börja med att definiera interface för sina klasser är ett effektivt sätt att strukturera sitt kodande.

Egentligen finns det ingen anledning att ställa interface mot abstrakta klasser. Ett interface beskriver tillgängliga metoder, en abstrakt klass hjälper till att implementera dem.

265 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
135 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)