Jelenlegi hely

16. Interfészek

Az interfész olyan viselkedéseket definiál, amelyet az osztályhierarchia tetszőleges osztályával megvalósíthatunk. Egy interfész metódusok halmazát definiálja, de nem valósítja meg azokat. Egy konkrét osztály megvalósítja az interfészt, ha az összes metódusát megvalósítja.

Definíció: Az interfész implementáció nélküli metódusok névvel ellátott halmaza.
Mivel az interfész a megvalósítás nélküli, vagyis absztrakt metódusok listája, alig különbözik az absztrakt osztálytól. A különbségek:

  • Az interfész egyetlen metódust sem implementálhat, az absztrakt osztály igen.
  • Az osztály megvalósíthat több interfészt, de csak egy ősosztálya lehet.
  • Az interfész nem része az osztályhierarchiának. Egymástól "független" osztályok is megvalósíthatják ugyanazt az interfészt.

Ebben a fejezetben egy olyan példaprogramot fogjuk használni, ami a Tervezési minták (Design Patterns) között szokás emlegetni megfigyelő (Observer) néven. Ez az osztály megengedi más osztályoknak, hogy regisztrálják magukat bizonyos adatai változásának figyelésére. A StockApplet osztály fog megvalósítani egy olyan metódust, amivel regisztrálni tud a változás figyeléséhez:

public class StockMonitor {
     public void watchStock(StockWatcher watcher,
                            TickerSymbol tickerSymbol,
                            BigDecimal delta) {
     ...
     }
}

Az első paraméter egy StockWatcher objektum. A StockWatcher annak az interfésznek a neve, amelyet hamarosan látni fogunk. Az interfész egyetlen valueChanged nevű metódust definiál. Egy objektum akkor tudja magát megfigyelőként regisztrálni, ha az osztálya megvalósítja ezt az interfészt. Amikor a StockMonitor osztály érzékeli a változást, meghívja a figyelő valueChanged metódusát.