Abstrakte klasser er klasser, som i sig selv ikke kan instantieres (laves objekter af). De bruges til at definere et abstrakt begreb gennem et minimum-sæt af metoder og attributter, som sub-klasser skal have.
Feks. kan man tage //Kunde// med subklasserne ErhvervsKunde og PrivatKunde...
Begge kunne f.eks. have kundenummer, oprettelsesdato, samt metoder til at tilgå disse.
Interfaces definerer adfærd gennem et sæt af metoder/konstanter, som kan implementeres af en klasse, ligemeget, hvor denne er i klassehierakiet.
Tag f.eks. disse to begreber/klasser
- Game
- Guitar
Man kan ikke sige, at der er et nært abstrakt forhold mellem disse.
Guitar ville nok have supertypen "Instrument", mens Game ville have "Toy" el. lign.
Derimod kan man definere at de har fælles adfærd. Bemærk f.eks. dette interface
interface Playable {
public void play();
}
Både Toy og Guitar har adfærden .play() (man kan både lege med et stykke lejetøj og spille på en guitar :-)
Sun betegner et interface således
"An interface defines a protocol of behavior that can be implemented by any class anywhere in the class hierarchy. An interface defines a set of methods but does not implement them. A class that implements the interface agrees to implement all the methods defined in the interface, thereby agreeing to certain behavior."
Fra
http://java.sun.com/docs/books/tutorial/java/interpack/interfaceDef.htmlDvs.
Abstract bruges til at betegne et "fælles" ophav for klasser
hvorimod
Interface bruges til at betegne ens adfærd.
En anden detalje er, at man kun kan nedarve fra ét abstrakt begreb, men at man kan betegnes med flere slags adfærd(interfaces)
f.eks
public class Guitar extends Instrument implements Playable, Tuneable
{
...
}
Her har vi beskrevet at Guitar er en konkretisering af et Instrument, men at en Guitar også har adfærd, hvilket gør at man kan spille på den, samt at man kan stemme den....
(Måske nok ikke det bedste eksempel :-)
bare spørg, hvis jeg ikke har fået noget forklaret ordenligt :-)
/Søren