Interface i Java: ett sätt att förbestämma vilka metoder en klass ska innehålla


Nyckelord: interface, klass, abstraktion

Interface Java

I den här artikeln lär vi oss om interface (svenska: gränssnitt) i Java. Vi lär oss hur man implementerar ett interface och hur man använder dem med hjälp av exempel.

Vad är ett interface i Java?

Vi tänkte oss en klass som en mall för egenskaper en klass ska ha, medans ett interface är ett sätt att förbestämma vilka egenskaper en klass ska ha. Ett interface blir med andra ord ett sätt att fördefiniera en klass, så att alla klasser håller samma struktur.

Varför ska man använda ett interface i Java?

Rent generellt så bidrar interface till ökad abstraktion i våra program. Exempelvis, när man arbetar i större projekt är det vanligt att man sitter i olika projektgrupper som programmerar mot samma program. Då är det viktigt att ha förbestämda krav så att alla utvecklare utgår från samma bestämmelse.

Hur fungerar interface i Java?

Ett interface är en helt abstrakt klass som innehåller en grupp metoder som inte har något tillhörande kodblock. Det betyder att metoderna i ett interface anger enbart vilka metoder som klassen ska ha, inte vad metoderna ska göra.

Interface är ett sätt att förbestämma vilka metoder en klass ska innehålla.

Interface i Java:

  • Är en mall över vilka egenskaper/metoder en klass ska innehålla.
  • Ett sätt att fördefinera en klass, så att alla klasser håller samma struktur.
  • Används till klasser med liknande struktur.

Hur skapar man ett interface i Java?

Ett interface i Java skapas med det reserverade ordet interface, följt av det namn man vill använda. Precis som för klasser så är det praxis att namnet på ett interface börjar med stor bokstav.

Syntax: Interface i Java

Om vi använder instruktionerna ovan och skriver in det i kodeditorn

interface NamnInterface {

    // Metoder tillhörande interface

}

Inom måsvingar anger man vilka metoder, det vill säga, vilka egenskaper klassen har. Man anger enbart vilka metoder som klassen ska ha, inte vad metoderna ska göra. Vidare, när man implementerar en klass från ett interface, får klassen automatiskt alla metoder som angivits i interfacet.

Syntax: Skapa en klass från ett interface i Java

För att skapaa en klass från ett interface använder man det reserverade ordet implements

interface NameInterface {

    // Metoder tillhörande interface

}

class NameOfClass implements NameInterface  {

    // Kod tillhörande klassen 

}

Samverkan mellan interface och klasser

Som visas i figur 1 nedan så utökar (extends) en klass en annan klass, ett interface utökar (extends) ett annat interface, men en klass implementerar (implements) ett interface.

Interface Java

Figur 1:Samverkan mellan klasser och interface i Java

Exempel: Hur skapar man ett interface i Java

Vi ska i detta exempel programmera flera olika djur och eftersom djur har många liknande egenskaper så blir det perfekt att använda ett interface som varje djur kan utgå ifrån. Det betyder alltså att varje nytt djur vi skapar utgår från samma mall, vårt interface, och får samma egenskaper.

Om vi tar och illustrerar hur det här programmet ska vara uppbyggt:

Exempel Interface Klasser Objekt Java

Figur 2: Exempel Interface i Java

Låt oss börja med att skapa interfacet Animals enligt:

public interface Animal {
    String whatDoesTheAnimalDo();
    String whatDoesTheAnimalSay();
    void setName(String name);
    void setAge(int age);
}

Vi inkluderar fyra stycken metoder för vårt interface Animals. Kom ihåg att metoderna i ett interface är abstrakta och vi anger enbart vilka metoder som klassen som skapas från vårt interface ska ha, inte vad metoderna ska göra.

Exempel: Skapa klassen Cow och klassen Pig

Vidare, nu när vi har vårt interface på plats så använder vi det för att skapa klassen Cow.

public class Cow implements Animal { 

  //Klassvariabler 
  String name; 
  int age; 

  //Definierar konstruktorn 
  Cow(String name, int age){ 
    this.name = name; 
    this.age = age; 
  } 

  @Override 
  public String whatDoesTheAnimalDo() { 
    return null; 
  } 

  @Override 
  public String whatDoesTheAnimalSay() { 
    return null; 
  } 

  @Override 
  public void setName(String name) { 
    return null;
  } 

  @Override 
  public void setAge(int age) { 
    return null;
  } 

}

I vissa IDE, exempelvis IntelliJ, blir metoderna som interfacet innehåller automatiskt skapade när kommandot implements används. Vidare, det är viktigt att notera att alla metoderna som är specificerade i interfacet måste finnas i klassen som blir implementerat, annars kommer vi få ett kompileringsfel.

Nyckelordet @override skrivs ut av kompilatorn om metoderna har implementerats korrekt, det gör det enklare att hitta eventuella fel, exempelvis om en metod skulle råka vara felstavad.

Alla metoderna som är specificerade i interfacet måste finnas i klassen som implementeras, annars kommer vi få ett kompileringsfel.

När IDE:t skapar metoderna automatiskt, är metoderna tomma eller returnerar null. Det ska vi ändra på nu. Vi skapar även klassen Pig på motsvarande sätt som Cow. Vi skriver inte ut den koden här då den ser likadan som klassen Cow, med enda skillnaden gällande namnet på klassen.

Exempel: Skapa objekt från klassen Cow och klassen Pig

Vidare, vi ska nu skapa två objekt från klassen Cow och klassen Pig, låt oss börja med objektet från klassen Cow.

public class Cow implements Animal {
    //Klassvariabler
    String name;
    int age;

    //Definierar konstruktorn
    Cow(String name, int age){
        this.name = name;
        this.age = age;
    }

    @Override
    public String whatDoesTheAnimalDo() {
        return "The cow is eating";
    }

    @Override
    public String whatDoesTheAnimalSay() {
        return "The cow says Moo";
    }

    @Override
    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void setAge(int age) {
        this.age = age;
    }
}

Sedan skapar vi objektet från klassen Pig.

public class Pig implements Animal {
    //Klassvariabler
    String name;
    int age;

    //Definierar konstruktorn
    Pig(String name, int age){
        this.name = name;
        this.age = age;
    }

    @Override
    public String whatDoesTheAnimalDo() {
        return "The pig is sleeping";
    }

    @Override
    public String whatDoesTheAnimalSay() {
        return "The pig says oink oink";
    }

    @Override
    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void setAge(int age) {
        this.age = age;
    }
}

Avslutningsvis skapar vi en huvudklass och instansierar ett objekt från varje klass.

public class Farm {

    public static void main(String args[]){
        Cow cow = new Cow("Rosa", 3);
        Pig pig = new Pig("Piggy", 1);

        System.out.println(cow.whatDoesTheAnimalDo());
        System.out.println(cow.whatDoesTheAnimalSay());

        System.out.println(pig.whatDoesTheAnimalDo());
        System.out.println(pig.whatDoesTheAnimalSay());
    }
}

Utskriften när vi anropar metoderna whatDoesTheAnimalDo() och whatDoesTheAnimalSay() blir:

The cow is eating
The cow says Moo 
The pig is sleeping
The pig says oink oink

Vad är det för skillnad mellan en klass och interface?

Vi har redan berört ett par av skillnaderna, men låt oss sammanfatta och klargöra det ytterligare.

  • Ett interface kan inte ha någon konstruktor medan, som vi sett tidigare, så är en konstruktor en av de centrala delarna i en klass.
  • Alla metoder i ett interface är abstrakta. Det betyder att metoderna i ett interface anger enbart vilka metoder som klassen ska ha, inte vad metoderna ska göra.
  • Alla variabler och metoder i ett interface deklareras som standard som public, medans variabler och metoder i en klass kan deklareras med valfri access modifier (public, private, default, protected)

Sammanfattning: Interface i Java

Ett interface i Java är en mall över vilka egenskaper/metoder en klass ska innehålla. Därför blir ett interface ett sätt att fördefinera en klass, så att alla klasser håller samma struktur. Man skapar ett interface i Java med det reserverade order interface och för att skapa en klass från ett interface använder man sig av det reserverade ordet implements.

Vanliga frågor och svar: Interface i Java

Hur skapar man ett interface i Java?

Ett interface i Java skapas med det reserverade order interface och för att sedan skapa en klass från ett interface använder man sig av det reserverade ordet implements.

Vad är det för skillnad mellan ett interface och en klass?

Dom huvudsakliga skillnaderna är att ett interface kan inte ha någon konstruktor medan en konstruktor är en av de centrala komponenterna i en klass. Samt att alla metoder i ett interface är abstrakta, vilket betyder att metoderna i ett interface anger enbart vilka metoder som klassen ska ha, inte vad metoderna ska utföra.

Måste jag använda mig av ett interface?

Nej, det är självklart inget måste, men exempelvis när man arbetar i större projekt är det vanligt att man sitter i olika projektgrupper som programmerar mot samma program. Då är det viktigt att ha förbestämda krav så att alla utvecklare utgår från samma bestämmelse.

Vad tyckte du om sidan?

Lämna gärna feedback och hjälp oss göra sidan bättre

Feedback gör oss bättre!

Lämna gärna feedback om vad du tyckte om avsnittet!