[ darthskywalker @ 18.01.2012. 16:21 ] @
Pozdrav,
da li mi neko moze objasniti svrhu interface-a ? Nedavno sam poceo uciti Javi , shvatio sam klase i nasledjivanje klasa ali ne mogu da shvatim interfejse. Vidio sam njihovu definiciju, metodi koji nisu implementirani i staticki atributi pa se ti metodi implementiraju u klasi. Zasto su mi potrebni interfejsi kad ja te metode iz interfejsa ionako mogu implementirati u klasi bili oni u interfejsu deklarisani ili ne? Vjerujem da postoji dobar razlog za to, pa ako mi neko moze objasniti, bio bih zahvalan. Pozdrav :)
[ javash @ 18.01.2012. 20:37 ] @
Interfejs definise ugovor... ti znas da hoces da radis nad klasama koje implementiraju odredjene osobine ali te ne zanima kako implementiraju niti koja tacno implementacija je u pitanju (mozes da imas vise implementacija)

Npr

Code:


public interface Swimmer {

      public void swim();

}



I sada ti hoces da napravis metod koji zna da radi nesto sa Swimmer instancama.. ali te bas briga ko ih je i kako implementirao.. sve sto ti zelis jeste da imaju swim() metod.

Code:


public void startSwimming(Swimmer sw){ sw.swim(); }



[ biske86 @ 18.01.2012. 22:26 ] @
Evo još jednog primera iz knjige:
Obično, isporučilac neke usluge tvrdi: "Ukoliko je vaša klasa prilagođena određenom interfejsu, tada ću ja izvršiti tu uslugu". Obratimo pažnju na jedan konkretan primer.

Metoda sort klase Arrays obećava da će sortirati niz objekata, ali samo pod jednim uslovom. Ti objekti moraju da pripadaju klasi koja implementira interfejs Comparable.
U nastavku je prikazan interfejs Comparable:
Code (java):
public interface Comparable {
     int compareTo(Object other);
}


To znači da se od svake klase koja implementira interfejs Comparable, zahteva da ima metodu comareTo, i da ta metoda mora uzimati parametar Object i vratiti ceo broj.


Dobar primer bi bio i paket java.sql.*
Na primer Java programeri su oslobođeni razmišljanja oko implementacije klasa za pristup bazama. Sa tačke gledišta programera pristup svima bazama je isti. To je iz razloga što se paket java.sql.* uglavnom sastoji od interfejsa a proizvođači baza samo obezbeđuju implementaciju za svoju bazu.
[ zoranix @ 19.01.2012. 07:42 ] @
`Ajd sad malo ja, još konkretnije na pitanje....

U principima objektno orijentisanog programiranja stoji da se treba omogućiti višestruko nasleđivanje. To praktično znači da treba omogućiti da se kreiranjem sopstvene klase (šeme) može naslediti više od jedne klase (šeme). Kao šti si pročitao u Java priručniku, ne postoji višestruko nasleđivanje (nema više od jednog "extend"!). Višestruko nasleđivanje uglavnom zna da pravi probleme, odnosno da bude konfuzno, u raznim implementacijama oop-a, kao na primer u "c++". S obzirom da je Java implementacija novija od "c++" implementacije oop-a, to se pribeglo metodi da se razlozi za višestrukim nasleđivanjem zadrže, a da se pri tom otklone pomenute "konfuzije" oko višestrukog nasleđivanja, pa su uvedeni takozvani "interfejsi".

Kao što znaš (verujem, barem...?!) u svojoj Java klasi možeš implementirati, teoretski, neograničen broj interfejsa. Time je princip oop-a, oko višestrukog nasleđivanja ispunjen, ali malo na svojstven način. U startu su neki kritikovali Java implementaciju oop-a, ali se kasnije ispostavilo da nisu bili u pravu i da uvođenjem "interfejsa" ništa nije bitno izgubljeno. Nego naprotiv, dodata je nova funkcionalnost, koja nije pomenuta u oop priručnicima.