okej, teraz to praktické využitie... hehe
to bude ťažšie trochu, ak ťa nebudem chcieť popliesť ďalšími divnými vecami
najdôležitejšia vec je tu polymorfizmus - ak dáš rozhranie ako parameter nejakej metódy, tak objekt akejkoľvek triedy, ktorá to rozhranie implementuje, môže do tej metódy ísť ako parameter... rôzne výhody: napr. dokážeš zmeniť algoritmus za behu - napr. na základe nejakého testu (if-u) a implementácia bude stále čitateľná (a samotný algoritmus bude bez if-ov)... alebo napr. naloaduješ za behu triedu, ktorá implementuje rozhranie, z nejakej knižnice, ktorú napr. nepoznáš (plug-in) a potom môžeš túto triedu používať, pretože vieš, že určite bude obsahovať metódy, ktoré to rozhranie definuje (a nepotrebuješ poznať implementáciu, alebo ostatné metódy v tej triede, etc)...
príkladom by mohlo byť napr. rozhranie IUseable v adventúre... máš to rozhranie a máš predmety, ktoré ho implementujú... ak predmet (trieda) to rozhranie implementuje, tak potom vieš, že sa dá taký predmet použiť (a vieš, podľa rozhrania, že má metódu "use")... a môžeš taký predmet použiť v príkazu "použi"...
hmm, napr. niečo takéto:
interface IUseable {
void use();
}
class Door implements IUseable {
public void use() {
// urobí niečo konkrétne pre dvere
}
}
class Window implements IUseable {
public void use() {
// urobí niečo konkrétne pre okno
}
}
class Pouzi {
public void execute(string name) {
IUseable item = items.getUseableItem(name);
// tu napr. nepotrebuješ poznať konkrétny typ toho objektu, stačí ti vedieť, že implementuje rozhranie IUseable... a vieš, že potom má metódu "use"... o to, čo konkrétne má predmet urobí, sa už postará kód v tej metóde use() v správnej triede...
if (item != null) item.use();
else throw new InvalidOperationException("tento predmet sa nedá použiť...");
}
}
keby si tam rozhranie nepoužil, tak by si potreboval niečo takéto (v tej poslednej metóde execute):
public void execute(string name) {
Item item = items.getItem(name);
if (item instanceof Door) {
((Door) item).use();
}
else if (item instanceof Window) {
((Window) item).use();
}
else {
throw new InvalidOperationException("tento predmet sa nedá použiť...");
}
}
pre každý predmet vlastný if, vlastné pretypovanie, etc a mal by si množstvo riadkov
dá sa to pochopiť?
ak nie, kľudne sa pýtaj... konkrétnejšie otázky, ako si to ty predstavuješ, čo presne ti nie je jasné (napr na tom príklade), etc... budem odpovedať...
btw, sorry, ak sú chyby (napr. instanceof si nie som istý, či sa tak zapisuje) v tom príklade - javu nepoužívam...