Kurzusok
/
Java
Java
/
Tanterv
/
Interfészek
In

Interfészek ebben a kurzusban: Java

1 feladat

A(z) Interfészek fogalomról

Az interfaces a legfőbb módja annak, hogy leválasszuk egy osztály használatát a megvalósításáról. Ez a leválasztás rugalmasságot ad a megvalósítás karbantartásához, és segít támogatni a típusbiztos, generikus viselkedést.

Az interfész szintaxisa hasonlít az osztályéhoz, azzal a különbséggel, hogy a metódusok csak szignatúraként jelennek meg, törzs nélkül.

public interface Language {
    String speak();
}

public interface ItalianLanguage extends Language {
    String speak();
    String speakItalian();
}

public interface ScriptConverter {
    void setVersion(String version);
    String getVersion();
    String convertCyrillicToLatin(String cyrillic);
}

A megvalósító osztálynak minden műveletet meg kell valósítania, amelyet az interfész definiál.

Az interfészek jellemzően az alábbiak közül egyet vagy többet tesznek lehetővé:

  • Lehetővé teszik, hogy a használó kód több különböző osztályt egységesen kezeljen. Ilyenkor az interfészek ugyanazt a szerepet töltik be, mint egy bázisosztály. Erre példa a java.io.InputStream,
  • Egy adott célra a funkcionalitás egy részhalmazát teszik elérhetővé (például a Comparable<T>)
  • Egy osztály nyilvános API-ját teszik elérhetővé, hogy több megvalósítás is létezhessen egymás mellett. Erre egy példa a test double
public class ItalianTraveller implements ItalianLanguage {

    public String speak() {
        return "Ciao mondo";
    }

    public String speakItalian() {
        return speak();
    }
}

public class ItalianTravellerV2 implements ItalianLanguage {

    public String speak() {
        return "migliorata - Ciao mondo";
    }

    public String speakItalian() {
        return speak();
    }
}

public class FrenchTraveller implements Language {
    public String speak() {
        return "Ça va?";
    }
}

public class RussianTraveller implements Language, ScriptConverter {

    private String version;

    public void setVersion(String version) {
        this.version = version;
    }

    public String getVersion() {
        return version;
    }

    public String speak()
    {
        return "Привет мир";
    }

    public String convertCyrillicToLatin(String cyrillic) {
        throw new UnsupportedOperationException();
    }
}

public class DocumentTranslator implements ScriptConverter {

    private String version;

    public void setVersion(String version) {
        this.version = version;
    }

    public String getVersion() {
        return version;
    }

    public String translate(String russian) {
        throw new UnsupportedOperationException();
    }

    public String convertCyrillicToLatin(String cyrillic) {
        throw new UnsupportedOperationException();
    }
}

A fenti interfészeket és osztályokat használó kód a következőket teheti:

  • Minden beszélőt ugyanúgy kezelhet, függetlenül a nyelvétől.
  • Lehetővé teheti, hogy egy írásváltást kezelő alrendszer anélkül működjön, hogy törődne azzal, milyen konkrét típusokkal van dolga.
  • Nem kell tudnia az olasz beszélő változásairól, ami kényelmes, ha az osztály kódját és a felhasználói kódot más-más csapat tartja karban.

Az interfészeket széles körben használják a tesztelés támogatására, mert megkönnyítik a mockolást.

Az interfészek az extend kulcsszóval kiterjeszthetnek más interfészeket.

Az interfész tagjai alapértelmezés szerint public láthatóságúak.

Az interfészek tartalmazhatnak egymásba ágyazott típusokat: interfaces, enums és classes. Itt a tartalmazó interfészek névtérként szolgálnak. Az egymásba ágyazott típusokhoz az interfészen kívülről úgy férünk hozzá, hogy az interfész nevét elé írjuk, és pont szintaxissal azonosítjuk a tagot.

A Java tervezésénél fogva nem támogatja a többszörös öröklődést, de az interfészeken keresztül lehetővé tesz egyfajta többszörös öröklődést.

Ráadásul az egész interfészmechanizmus alapja az a fogalom, hogy a polimorfizmus interfészeken keresztül is megvalósítható.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg

Tanuld meg a(z) Interfészek fogalmat