Interface
Ett interface Àr en abstrakt typ. Det Àr för att den definerar en uppsÀttning metoder utan att implementera dem, d.v.s, abstrakta metoder.
Ett interface Àr ingen klass och man kan inte instansiera ett interface.
En klass som implementerar interfacet mÄste implementera alla abstrakta metoder som finns i interfacet.
NÀr vi deklarerar variabler anger vi deras typ. För referensvariabel anvÀnds klass eller interfacenamn som typ.
Exempel
Antag att man i en program hanterar djur. Alla djur lÄter och sÄ man vill vara sÀker pÄ att de har en metod sound()
.
Vi kan lösa det genom att skapa ett interface Djur
med en abstrakt metod sound()
och lÄter klasserna Hund
och Katt
implementera interfacet med nyckelordet implements
.
interface Djur {
void sound(); // Alla klasser som implementerar detta mÄste ha denna metod
}
class Hund implements Djur {
@Override
public void sound() { // Klass Hund implementerar metoden
System.out.println("Hunden skÀller: Voff voff!");
}
}
class Katt implements Djur {
@Override
public void sound() { // Klass Katt implementerar metoden
System.out.println("Katten jamar: Mjau mjau!");
}
}
classDiagram class Djur <<interface>> Djur Djur : sound() class Hund class Katt Hund : sound() Katt : sound() Djur <|.. Hund Djur <|.. Katt
En annan lösning Àr att skapa en gemensam superklass med en abstrakt metod ljud()
men Hund
och Katt
har inga gemensamma metoder och attribut som kan flyttas upp till superklassen och dÀrför Àr det onödigt.
Deklarera Interface
- En interface finns i en egen fil (om den Àr
public
) och kompileras. - En interface kan innehÄlla en eller fler abstrakta metoder, konstanter, statiska metoder, default-metoder.
- Metoderna i en interface Àr redan
public
ochabstract
sÄ man behöver inte skriva det.
Implementera flera Interface
En klass kan implementera flera interface men kan endast Àrva frÄn en klass.
public class Hund extends Canis implements Djur, Varelse {
... //hÀr implementeras allt i klassen Canis och interface Djur och Varelse
}
Personlig Notis
Jag har undrat varför man behöver interface om de fungerar typ endast som en mall. Det som jag har kommit fram till Àr att interface inte Àr sÄ anvÀndbar om man gör smÄ projekt sjÀlv. Men om jag jobbar pÄ samma projekt med 10+ personer och det finns tusentals rader kod sÄ vill jag att alla mÄste följa en mall. DÄ Àr det kompilatorn som ser till att vi jobbar som vi ska.