Tananyag‎ > ‎Objektumorientáció‎ > ‎

Interfészek

Az interfészek (interface-ek) hasonlítanak a javás osztályokra. Ugyanúgy egyfajta közös tulajdonságokkal bírnak az interfészek egyedei. A különbség, hogy míg az osztályokban definiáltuk az egyedek viselkedését, az interfészben csak jelezzük a tulajdonságokról, hogy léteznek.

Gondoljunk például egy távirányító alkalmazásra. Szeretnénk, ha az alkalmazás mindenféle távirányítóként tudna működni. Tudja irányítani az LG okostévéket, a számítógépes Spotify-t, a Samsung DVD lejátszót.

Minden esetben közös, hogy tudjuk a hangerőt állítani, tudunk léptetni a következő számra. Szüneteltetni tudjuk a lejátszást, ...

Viszont mondanom sem kell, hogy teljesen más technikát igényelnek az egyes megoldások. Máshogy kell kommunikálni egy számítógéppel, mint egy adott márka adott készülékével. Ezért a funkciókról csak annyit tudunk elmondani, hogy léteznek, de nem tudunk egy általános viselkedést a funkciókhoz rendelni.

Nézzük meg az előző példát kódként!

Taviranyito.java

public interface Taviranyito {

    public void lejatszas();

    public void szunet();

    public void kovetkezo();

    public void elozo();

    public void ugras(float masodperc);

}

Látszik, hogy üresen hagytuk a metódusok belsejét, mert hogy is tudnánk őket kitölteni? Minden készülékhez más működés tartozik...

LgTvTaviranyito.java

public class LgTvTaviranyito implements Taviranyito {

    public LgTv lgTv = new LgTv(...);

    public void lejatszas() {
        lgTv.indit();
    }

    public void szunet() {
        lgTv.allj();
    }

    public void kovetkezo() {
        lgTv.kovi();
    }

    public void elozo() {
        lgTv.vissza();
    }

    public void ugras(float masodperc) {
        int ezredMp = (int)(masodperc * 1000);
        lgTv.ugorj(ezredMp);
    }
}

De lehet, hogy egy számítógépet teljesen másképp kell vezérelni:

SzamitogepTaviranyito.java

public class SzamitogepTaviranyito implements Taviranyito {

    public void lejatszas() {
        Szamitogep.keszuljFel();
        Szamigogep.mehet();
    }

    public void szunet() {
        Szamitogep.szunet();
        Szamitogep.leallit();
    }

    public void kovetkezo() {
        Szamitogep.ugras(Szamitogep.holTart() + 1);
    }

    public void elozo() {
        Szamitogep.ugras(Szamitogep.holTart() - 1);
    }

    public void ugras(float masodperc) {
        Szamitogep.teker(masodperc);
    }

}

Érdemes tudni

  • Az osztályokkal ellentétben több interfész "őse" is lehet egy osztálynak. Tehát az "extends" szócska után pontosan egy ősosztály lehet, de akár több interfészt is lehet egy osztálynak implementálnia. Például:
    FmRadio.java
    public interface FmRadio {
        ...
    }
    
    Zseblampa.java
    public interface Zseblampa {
        ...
    }
    
    Okostelefon.java
    public class Okostelefon implements FmRadio, Zseblampa {
        ...
    }
    
  • Interfészeknek is lehetnek "al-interfészei" az osztályokhoz hasonlóan. Például:
    public interface DvdTaviranyito extends Taviranyito {
    
        public void dvdKiadasa();
    
    }
    
Comments