Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 14

Java klase

Sada, kad smo videli detalje jezika Java, koncentrisaemo se na Java klase, jer je, kao to je poznato, Java objektno orjentisani jezik. Java klasa je pojam iz vremena kompilacije, koji predstavlja objekat u vremenu izvravanja. Drugim reima, klasa je definicija ablona za objekatkoji e da postoji unutar programa. Na primer, ako imamo klasu Automobil, moemo imati konkretnu instancu (lan) te klase koji je Folksfagen Buba iz 1966. Instance (Folksfagen Buba 1966) klase (Automobil) se nazivaju objekti. Da bi se definisala klasa u Javi, trba uraditi neto slino sledeem:
class Automobil { // promenljive - clanovi // metodi - clanovi }

Deklaracije polja
je u ovom trenutku prazna klasa. Da bi ova klasa postala korisna, potrebno je da se dodaju neka polja u klasu. Polje moe biti promenljiva-lan ili promenljiva-metod. Za deklaraciju promenljive-lana, potrebno je da se identifikuje tip promenljive i naziv promenljive unutar definicije klase, kao to je i prikazano:
Automobil class Automobil { // promenljive - clanovi String proizvodjac; String model; int godinaProizvodnje; int brojPutnika; }

U ovom primeru, klasa Automobil je dograena tako da ukljui string promenljive za proizvoaa i model i celobrojne promeljive koje predstavljaju godinu proizvodnje i broj putnika koji se moe nai u vozilu.

Pristup polju
Jedna od osnovnih prednosti u objektno-orjentisanom programiranju je enkapsulacija (uaurenje). Enkapsulacija je sposobnost klase da sakrije detalje implementacije od ostalih klasa, izlaui samo javni interfejs ostalim klasama. Podrka za enkapsulaciju u Javi se oslanja na tri kljune rei: public, private, i protected. Kada se definie klasa, ovi modifikatori za pristup polju se koriste za kontrolu ko moe pristupiti konkretnom polju klase. Ako se polje deklarie kao public (srp. javno), time se odreuje da se tom polju moe pristupiti iz ma koje druge klase. Nastavljajui primer sa klasom Automobil, za deklaraciju svih polja klase kao javnih polja, treba uraditi sledee:
class Automobil

{ // promenljive - clanovi public String proizvodjac; public String model; public int godinaProizvodnje; public int brojPutnika; }

Naravno, deklarisanjem svega kao javnog ne postie se cilj enkapsulacije, jer to doputa da druge klase direktno prispupaju promenljivima iz klase Automobil. Razmotrimo, na primer, ta bi se dogodilo ako se kreira instanca klase za Ford Mustang iz juna 1964. S obzirom da godinaProizvodnje moe sadrati samo celobrojne promenljive, pokuaj da se vrednost postavi na 1964.5 bi proizveo izuzetak. Dakle, ako bi bilo omogueno da se godinaProizvodnje postavlja iz drugih klasa, kod bi neizostavno pukao. Kljuna re private (srp. privatan) se koristi za restrikciju pristupa polju. Klasa ne moe pristupiti privatnom polju neke druge klase. Pretpostavimo da klasa Automobil treba da se koristi u nekoj aplikaciji za prodaju automobila. U tom sluaju, potrebno je da se klasa Automobil definie na sledei nain, kako bi cena bila sakrivena od potencijalnih kupaca:
class Automobil { // promenljive - clanovi public String proizvodjac; public String model; public int godinaProizvodnje; public int brojPutnika; private float cena; }

Na kraju, kljuna re protected (srp. zatien) se koristi da bi ukazala da se polju moe pristupiti iz tekue klase i iz svih klasa koje su izvedene iz tekue klase, ali ne iz drugih klasa. Sposobnost izvoenja klasa iz druge klase bie opisana neto kasnije.

Postavljanje inicijalnih vrednosti


Jedna izuzetno lepa osobina Java klasa je mogunost da se specificiraju inicijalne vrednosti za promenljive-lanove u samoj deklaraciji promenljive-lana. Na primer, s obzirom da je najvei broj automobila registrovan za etiri putnika, ima smisla da se podrazumevana vrednost za brojPutnika postavi na 4, kako je i prikazano u sledeem kodu:
class Automobil { // promenljive - clanovi public String proizvodjac; public String model; public int godinaProizvodnje; public int brojPutnika = 4;

private float cena; }

Statiki lanovi
Pored private, protected, i public lanova, Java klasa moe da ima statike lanove. Statiki lano pripada samoj klasi (ponegde se zbog toga zove i klasni lan), a ne instanci neke klase. Bez obzira koliko instanci klase biva kreirano tokom rada programa, postojae tano jedna instanca svakog statikog lana. Deklarisanje statikog lana se obavlja dodavanjem kljune rei static (srp. statian) na druge modifikatore pristupa polju, kako je i prikazano u sledeem primeru:
class Automobil { // promenljive - clanovi public String proizvodjac; public String model; public int godinaProizvodnje; public int brojPutnika = 4; private float cena; public static int brojGuma = 4; }

U ovom sluaju, promenljiva brojGuma je ukljuena i postavljena na vrednost 4. S obzirom da svaki automobil ima etiri gume, brojGuma se deklarie kao static. Nadalje, budui da brojGuma treba da bude pristupaan i drugim klasama, on e biti deklarisan kao public. Takoe je mogue da se metodi-lanovi deklariu kao statiki, to e biti kasnije prikazano.

Metodi-lanovi
Pored lanova-promenljivih, najvei broj klasa takoe ima i lanove-metode. Budui da su metode-lanovi, kao i promenljive-lanovi, polja, pristup im se kontrolie sa modifikatorima public, protected, i private. Metod-lan se deklarie prema sledeoj sintaksi, pri emu uglaste zagrade ukazuju na opcionalnost elementa:
[modifikatoriMetoda] tipRezultata imeMetoda [throws listaIzuzetaka] { // telo metoda }

Konstrukt modifikatoriMetoda su ve poznate kljune rei public, protected i private sa istim znaenjem koje su i ranije imali. Modifikatori metoda su opisani u sledeoj tabeli.

Modifikatori metoda
Modifikator public protected private static abstract fiinal native Svrha Pristupano i van klase u kojoj je deklarisano. Pristupano unutar klase u kojoj deklarisano i iz podklasa od te klase. je

Pristupano iskljuivo unutar klase u kojoj je deklarisano. Metod pripada klasi, a ne konkretnoj instance te klase. Nije implementirana u toj klasi. Ne moe biti predefinisana u podklasama. Implementacija zavisna od platforme, realizovana u drugom jeziku, obino C-u ili asembleru. Koristi se da indicira kritian metod, koji e zakljuati objekat kako bi spreilo izvravanje ostalih metoda dok se sinhronizovani metod izvrava.

synchronized

Konstrukt tipRezultata u deklaraciji metoda moe biti jedan od primitivnih tipova (na primer, int, float, char), neka druga klasa, ili void. Ako je tip rezultata void, to pokazuje da se nijedan rezultat na vraa pozivaocu metoda. Posle imena metoda, definie se (po potrebi) lista izuzetaka koje metod moe da podigne. Ako nema izuzetaka koje podie ovaj metod, onda je lista izuzetaka prazna. Kao ilustaraciju gornjeg stava, dodajmo metod na klasu Automobil:
class Automobil { // promenljive - clanovi public String proizvodjac; public String model; public int godinaProizvodnje; public int brojPutnika = 4; private float cena; public float SracunajProdajnuCenu() { return cena * 1.5; } public static int brojGuma = 4; }

ovom

sluaju,

SracunajProdajnuCenu.

klasa Automobil sadri i javni metod-lan, nazvan Ovaj metod vrae float i telo metoda izraunava povratnu

vrednost.

Preoptereeni methodi Sposobnost preoptereivanja (eng. overload) methoda je jedno od najveih prednosti u radu sa objektno orjentisanim jezicima, i u tom pogledu Java zasigurno nije razoarenje. Preoptereenje metoda znai da se koristi isto ime metoda za vie od jednog metoda. Na primer, klasa Automobil moe sadravati dva metoda SracunajProdajnuCenu, kao u sledeem primeru:
class Automobil { // promenljive - clanovi public String proizvodjac; public String model; public int godinaProizvodnje; public int brojPutnika = 4; private float cena; public float SracunajProdajnuCenu() { return cena * 1.5; } public float SracunajProdajnuCenu( float margina ) { return cena * (1 + margina); } public static int brojGuma = 4; }

Tokom izvravanja programa, Java moe razlikovati ova dva metoda na osnovu broja i tipova parametara koji su prosleeni. Stoga se metod moe preoptereivati koliko god treba puta, sve dok su liste parametata jedinstvene za svaku verziju. Drugim reima, sledei kod je nekorektan:
class Automobil { // promenljive - clanovi public String proizvodjac; public String model; public int godinaProizvodnje; public int brojPutnika = 4; private float cena; public float SracunajProdajnuCenu() { return cena * 1.5; } public float SracunajProdajnuCenu( float margina ) { return cena * (1 + margina); }

public float SracunajProdajnuCenu( float cinilac ) { return cena * cinilac; } public static int brojGuma = 4; }

U ovoj situaciji, poslednje dve deklaracije su u konfliktu, zato to svaka od njih prosleuje double. Razliita imena parametara nisu dovoljna za razlikovanje izmeu dve verzije iste preoptereene funkcije. Da bi se preoptereene funkcije razlikovale, one se moraju razlikovati u bar jednom tipu parametara. Konstruktori Specijalni tip metoda-lana je poznat kao konstruktor. Konstruktor se koristi prilikom kreiranja nove instance klase. Konstruktor se prepoznaje po tome to taj metod ima isto ime kao klasa. Kao i ma koji drugi metod, konstruktor moe biti preoptereen onoliko puta koliko god razliitih tipova parametara se javlja u okviru metoda. Obino konstruktor postavlja lanove-promenljive instance na vrednosti koje odgovaraju toj instanci. Kao primer, razmotrimo sledeu varijaciju klase Automobil:
public class Automobil { // promenljive - clanovi public String proizvodjac; public String model; public int godinaProizvodnje; public int brojPutnika = 4; private float cena; public float SracunajProdajnuCenu() { return cena * 1.5; } public float SracunajProdajnuCenu( float margina ) { return cena * (1 + margina); } // javni konstruktor public Automobil(String pro, String ime, int god, int put, float cen) { proizvodjac = pro; model = ime; godinaProizvodnje = god; brojPutnika = put; cena = cen; } // metod koji vraa string sa osnovnim podacima

public String OsnovniPodaci() { return new String(godinaProizvodnje + " " + proizvodjac + " " + model); } }

Konstruktor, Automobil, je dodat u ovu verziju klase Automobil. Konstruktoru se prosleuje pet parametara koji e se koristiti kao inicijalne vrednosti za promenljivelanove proizvodjac, model, godinaProizvodnje, brojPutnika, cena. Kod za konstruktor jednostavno postavlja vrednosti za tih pet instancnih promenljivih. Klasa Automobil takoe sadri i javni metod-lan, OsnovniPodaci, koji kreira string sa osnovnim podacima o automobilu. Korienjem konstruktora i novog metoda OsnovniPodaci, sada se iz druge klase mogu prikazati osnovni podaci o automobilu. Na primer, sledei kod e na standardni izlaz prikazati string "1967 Folksvagen Buba":
Automobil mojAuto = new Automobil("Folksvagen ", " Buba", 1967, 4, 3000); String s = mojAuto. OsnovniPodaci(); System.out.println(s);

Nova instanca klase Automobil je kreirana sledeim kodom:


Automobil mojAuto = new Automobil("Folksvagen ", " Buba", 1967, 4, 3000);

Upotreba kljune rei new instruie Javu da kreira novi objekt tipa Automobil alociranjem memorije i pozivom konstruktora Automobil, iji potpis odgovara listi parametara. U konkretnom sluaju, Automobil ima samo jedan konstruktor, pa se taj konstruktor poziva i postavlja instncne promenljive na vrednosti parametara. Jednom kad promenljiva mojAuto izae iz opsega na kraju funkcije u kojoj je deklarisana, automatsko upravljanje memorijom kod Jave e detektovati da memorija alocirana operatorom new vie nije referencirana i ona e biti osloboena. Napomena Ako klasa ne sadri konstruktor, Java e obezbediti podrazumevani konstruktor koji ne sadri parametre. Ovaj podrazumevani konstruktor e dopustiti kreiranje novih instanci date klase i postaviti sve promenljive-lanove novokreirane instance na sistemske podrazumevane vrednosti. Ipak, oObeleziTeritorijuno je i ne previe mudro da se osloni na postojanje podrazumevanog Java konstruktora. U optem sluaju, treba obezbediti bar jedan konstruktor za svaku novodefinisanu klasu.

Promenljiva this
Sve Java klase sadre skrivenu promenljivu-lan nazvanu this. Promenljiva-lan this moe da bude koriena radi referisanja na sam objekat. Jedan odlian nain korienja this-a je u konstruktorima. Uobiajeno je da se u konstruktoru skup promenljivihlanova postavi na vrednosti koje su kao parametri prosleeni konstruktoru. U takvim sluajevima, bilo bi dobro da se u kdu nae sledea naredba:
godina = godina;

Pri tome, promenljiva na levoj strani treba da bude promenljiva-lan, a promenljiva na desnoj strani parametar koji je prosleen konstruktoru. Na nesreu, u takvim sluajevima nijedan kompajler ne moe da shvati ta je programer nameravao. Ovakve probleme programeri esto prevazilaze na sledei nain:
public class Automobil { // promenljive - clanovi public String proizvodjac; public String model; public int godinaProizvodnje; public int brojPutnika = 4; private float cena; // javni konstruktor public Automobil(String fabrika, String ime, int god, int nosivost, float vrednost) { proizvodjac = fabrika; model = ime; godinaProizvodnje = god; brojPutnika = nosivost; cena = vrednost; } }

Programer je prinuen da izmisli dva imena za svaki pojam, pri emu se ime koje najbolje opisuje pojam dodeljuje promenljivoj-lanu u deklaraciji klase, a neto slabije ime se daje parametru u konstruktoru. Na taj nain, naredbe dodele su itljive od strane Jave, ali su pomalo zbunjujue za ljude. Kljuna re this obezbeuje veoma efikasno reenje za prethodni problem:
public class Automobil { // promenljive - clanovi public String proizvodjac; public String model; public int godinaProizvodnje; public int brojPutnika = 4; private float cena;

// javni konstruktor public Automobil(String proizvodjac, String model, int godinaProizvodnje, int brojPutnika, float cena) { this.proizvodjac = proizvodjac; this.model = model; this.godinaProizvodnje = godinaProizvodnje; this.brojPutnika = brojPutnika; this.cena = cena; } }

U ovom sluaju, nazivi kao to su this.godinaProizvodnje oznaavaju promenljivelanove, dok nekvalifikovani nazivi kao to je godinaProizvodnje oznaavaju parametre konstruktora. Naravno, prethodni kod je samo jedan primer kako se moe koristiti kljuna re this. Ova kljuna re se esto koristi kao parametar u drugim funkcijama i na mnogobrojne druge naine.

Nasleivanje klasa
Svaka Java klase koja se deklarie biva izvedena iz neke druge klase. Progrmaer moe, pri definisanju klase, korienjem kljune rei extends, odrediti iz koje klase se vri izvoenje. To je uraeno u sledeem programskom segmentu:
public class KlasicniAutomobil extends Automobil { // metode i promenljive clanovi }

U svim prethodnim primerima pri definisanju klasa nije koriena kljuna re extends. Ako se tako uradi, onda se podrazumeva da je klasa izvedena iz osnovne Java klase klase Object. Prema tome, sledee dve deklaracije klase su ekvivalentne:
public class Automobil { // metode i promenljive clanovi } public class Automobil extends Object { // metode i promenljive clanovi }

S obzirom na to da je Object klasa iz koje su (ako se pogleda dovoljno duboko) izvedene sve druge Java klase, on obezbeuje zajedniki skup funkcionalnosti meu svim Java klasama. Nadalje, i prikupljanje ubreta je mogue zato to sve klase u krajnjoj liniji vode svoje poreklo od klase Object.

Izvedena klasa se obino naziva podklasa(eng. subclass), dok se ona klasa iz koje se vri izvoenje naziva nadklasa (eng. superclass). Termin neposredna nadklasa (eng. immediate superclass) oznaava klasu iz koje je podklasa direktno izvedena. Tako je, na primer, KlasicniAutomobil podklasa i od klase Automobil i od klase Object. Dakle, Automobil i Object su nadklase klase KlasicniAutomobil, ali samo Automobil je neposredna nadklasa klase KlasicniAutomobil.

Prevazilaenje metoda-lanova
Kada se kreira klasa, ona nasledi svu funkcionalnost svojih nadklasa i njoj se po elji mogu dodati ili promeniti te nasleene funkcionalnosti. Kao primer ove tvrdnje, razmotrimo promenjenu deklaraciju klase Automobil u sledeem kodu:
public class Automobil { private int godinaProizvodnje; private float originalnaCena; // Proracunava prodajnu cenu na osnovu // originalne cene i godine proizvodnje public double ProracunajProdajnuCenu() { double prodajnaCena; if (godinaProizvodnje > 1994) prodajnaCena = originalnaCena * 0.75; else if (godinaProizvodnje > 1990) prodajnaCena = originalnaCena * 0.50; else prodajnaCena = originalnaCena * 0.25; return prodajnaCena; } // Javni konstruktor public Automobil(int godinaProizvodnje, float originalnaCena) { this.godinaProizvodnje = godinaProizvodnje; this.originalnaCena = originalnaCena; } }

Ova verzija klase Automobil uva informacije o godini proizvodnje i originalnoj ceni pri proizvodnji vozila. Ona sadri metod, ProracunajProdajnuCenu, koji odreuje cenu po kojoj e kola biti prodavana. Prdajna cena automobila moe biti, u zavisnosti od njegove starosti, bilo 75%, bilo 50% ili 25% originalne cene. Meutim, ovakav proraun je kompletno neadekvatan za klasine, tj. stare automobile. Po ovom algoritmu, Fordov Model T iz 1920. godine bi vredeo samo 25% od njegove originalne cene iz 1920. Neko blago poboljanje bilo bi da se pretpostavi da svaki KlasicniAutomobil vredi 10 000$. Da bi se to uradilo, KlasicniAUtomobil se izvodi iz Automobil, na sledei nain:

public class KlasicniAutomobil extends Automobil { // Proracunava prodajnu cenu public double ProracunajProdajnuCenu() { return 10000; } // Javni konstruktor public Automobil(int godinaProizvodnje, float originalnaCena) { super(godinaProizvodnje, originalnaCena); } }

S obzirom na to da je KlasicniAutomobil izveden iz Automobil, on nasleuje svu funkcionalnost klase Automobil, to ukljuuje promenljive-lanove including its member variables godinaProizvodnje i originalnaCena. Funkcija ProracunajProdajnuCenu se javlja u obema klasama. Ovo znaci da pojavljivanje te funkcije (metoda) u klasi KlasicniAutomobil prevazilazi pojavljivanje te iste funkcije u klasi Automobil za sve objekte koji su instance klase KlasicniAutomobil. Kao ilustraciju, razmotrimo sledei kod:
KlasicniAutomobil klasika = new KlasicniAutomobil(1920, 1400); double cenaKlasicnog = klasika.ProracunajProdajnuCenu(); Automobil obicni = new Automobil(1990, 12000); double cenaObicnog = obicni.ProracunajProdajnuCenu();

Promenljiva klasika je tipa KlasicniAutomobil i ona je konstruisana korienjem konstruktora te klase, kome je kao originalna cena vozila prosleena vrednost 1 400$. Potom se izraunava prodajna cena automobila i dobijena vrednost se smeta u promenljivu cenaKlasicnog. Ta prodajna cena e, budui da je promenljiva klasika tipa KlasicniAutomobil (ili, drugim reima, objekat klasika je instanca klase KlasicniAutomobil) iznositi 10 000$. Potom se konstruie obicni kao novi obekat tipa Automobil sa originalnom cenom 12 000$. Njegova prodajna cena se proraunava i smeta u promenljivu cenaObicnog. Kako je obicni instanca klase Automobil, to e njegova prodajna cena zavisiti od godine proizvodnje (1990) i iznositi 25% od 12 000$, tj. 3 000$.

Promenljiva super
U prethodnoj deklaraciji klase KlasicniAutomobil, koriena je promenljiva-lan super u konstruktoru. Isto kao to svaki objekat sadri promenljivu this koja ukazuje na sam taj objekat, tako objekat (ako se ne radi o instanci same klase Object) sadri promenljivu super koja predstavlja roditeljsku klasu (tj. nadklasu). U gornjem sluaju, pozivom super(godinaProizvodnje, originalnaCena) poziva se konstruktor nadklase Automobil.

Modifikatori klase
Klase koje su kreirane u Javi mogu biti modifikovane sa jednim od sledea tri modifikatora klase: public, final i abstract. Ako nije korien nijedan od modifikatora klase, tada klasa moe biti koriena samo unutar paketa u kom je deklarisana. Klasi koja je deklarisna sa modifikatorom public moe se pristupiti iz ma kog drugog paketa. Iz klase koja je deklarisana kao final se ne moe izvoditi, tj. takva klasa ne moe imati podklase.

Apstraktne klase
Nekada je potrebno deklarisati klasu, a da se u tom trenutku jo ne zna na koji e se nain definisati metodi koji pripadaju toj klasi. Na primer, potrebno je deklarisati klasu Sisar i da za tu klasu ukljuiti metod nazvan ObeleziTeritoriju. Problem je u tome to se ne moe odmah napisati metod ObeleziTeritoriju jer se ovo razliito realizuje za svaki podtip tipa Sisar. Ovaj problem e se, naravno razreiti izvoenjem podklasa klase Sisar, kao to su Pas i Covek. Ali, koji kod staviti u funkciju ObeleziTeritoriju unutar same klase Sisar? Java raspolae mogunou da se funkcija ObeleziTeritoriju u okviru klase Sisar deklarie kao abstract metod. Na taj nain, deklarie se metod bez pisanja ma kakvog koda u toj klasi. Naravno, potklase klase sa apstraktnim metodom mogu (i treba) da prevaziu apstraktni metod. Ako je neki metod definisan kao abstract, tada se i cela klasa mora defionisati kao abstract. U primeru klase Sisar i njenih podklasa, to bi izgledalo ovako:
abstract class Sisar { abstract void ObeleziTeritoriju(); } public class Covek extends Sisar { public void ObeleziTeritoriju() { //Obelezi teritoriju pravljenjem ograde } } public class ClanBande extends Sisar { public void ObeleziTeritoriju() { //Obelezi teritoriju grafitima } } public class Pas extends Sisar { public void ObeleziTeritoriju()

{ // Obelezi teritoriju onako kako pas to radi } }

Uoava se da u prethodnom kodu klasa Sisar ne sadri nikakav kod za ObeleziTeritoriju. Klasa Covek moe sadravati kod kojim se obeleava teritorija graenjem zatitne ograde oko iste, dok klasa ClabBande moe da sadri kod koji obeleava teritoriju crtanjem grafita pomou spreja. Klasa Pas e realizovati oznaavanje teritorije na nain karakteristian za pse. Napomena Privatni i statiki metodi ne mogu biti deklarisani kao apstraktni. S obzirom na to da privatni metodi ne mogu biti prvazieni u podklasi (jer oni za podklasu nisu ni vidljivi) to nema nikakvog smisla da postoje prvatni apstraktni metodi-lanovi. Na slian nain, budui da su svi statiki metodi implicitno finalni, to se ni statiki metodi ne mogu prevazilaziti pa nema smisla ni da postaju apstraktni.

Implementacija interfejsa
Obino apstraktna klasa ima neke metode koji su deklarisani kao abstract i neke metode koji nisu apstraktni. Ako se doe u situaciju da se deklarie klasa koja je u potpunosti apstraktna (svi metodi su apstraktni), onda je obino bolje da se umesto takve klase deklarie interfejs (eng. nterface). Interfejs je klasa koja je u potpunosti apstraktna. Iz interfejsa se mogu izvoditi podklase na nain koji je potpuno analogan izvoenju podklase iz neke druge klase. Kao primer, pretpostavimo da gradimo aplikaciju koja prikazuje sat u danu. Korisnik e imati dve opcije da dobije tu informaciju: moe je dobiti sa runog sata ili sa zidnog sata sa kukavicom. To moe biti implementirano na sledei nain:
interface Sat { public String VremeJe(int sat); } class Kukavica implements Sat { public String VremeJe(int sat) { StringBuffer str = new StringBuffer(); for (int i=0; i < sat; i++) str.append("Ku-ku "); return str.toString(); } } class RucniSat implements Sat

{ public String VremeJe(int sat) { return new String("Sada je " + sat + ":00"); } }

U ovom primeru, Sat je interfejs koji obezbeuje jednu jedinu funkciju VremeJe. Ovo znai da ma koja klasa koja se izvodi iz intrfejsa Sat (odnosno, koja implementira interfejs Sat) mora obezbediti funkciju a VremeJe. Klasa Kukavica je primer klase koja implementira interfejs Sat, to se zapisuje korienjem kljune rei implements umesto kljune rei extends. S obzirom da Kukavica implementira interfejs the Sat, ona mora obezbediti funkciju VremeJe. U ovom sluaju, funkcija VremeJe je implementirana tako to se kreira string koji e sadrati onoliko rei Ku-ku kolika je vrednost parametra sat. Klasa RucniSat takoe implementira interfejs Sat i obezbeuje funkciju VremeJe. Ta verzija funkcije kreira jednostavnu poruku koja sadri informaciju o vremenu. Interfejsi i nadklase se meusobno ne iskljuuju. Nova klasa moe biti izvedena iz nadklase i jednog ili vie interfejsa. U sledeem primeru, klasa implementira dva interfejsa i ima jednu nadklasu:
class MojaPodklasa extends MojaNadklasa implements PrviInterfejs, DrugiInterfejs { //Implementatcija klase }

S obzirom na to da klasa moe implementirati vie od jednog interfejsa, interfejsi su vrlo pogodan nain za implementaciju viestrukog nasleivanja.

You might also like