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.