The Wayback Machine - https://web.archive.org/web/20060301090802/http://mpulko.tripod.com:80/java/oop.htm
 Search: The Web Tripod     Gear Factor
share this page Share This Page  report abuse Report Abuse  build a page Edit your Site  show site directory Browse Sites  hosted by tripod
    « Previous | Top 100 | Next » hosted by tripod
mpulko.tripod.com

Menu

Programi/download
� MooLAN
� Alifatske spojine
� FileSplit
� Anketa
� Aditivi E

Tutoriali/primeri
� C++
� JavaScript
� Linux in bash skripte
� VBA makri
� Shockwave igre
� java
� pascal/delphi
� php
� Hacking

Igre
� Kviz
� Ladjice
� IQ test
� Barvni test

Povezave/linki
� Linux
� VBA makri
� Povezave name
� wappy.to/mpulko

� Domov


Osnove objektnega programiranja v javi

Uvod

Programiranje je zapisovanje navodil ra�unalniku, ki so potrebna za izvajanje kakega opravila. Dandanes je programska oprema vse obse�nej�a in vse bolj zahtevna ter njen razvoj zmeraj dra�ji. Od programske opreme zahtevamo veliko zanesljivost, saj programi krmilijo zelo zapletene in drage sisteme, kjer je vsaka napaka lahko usodna. V re�evanju teh problemov moramo iskati motive za nastanek vedno novih mo�nosti programiranja med katere spada objektno programiranje. To je danes v izjemnem razmahu, ker s svojim modelom zmanj�uje kompleksnost nalog ter z zmo�nostjo ponovne uporabe �e napisane programske kode omogo�a hitrej�i in cenej�i razvoj ter ve�jo zanesljivost.

 

Prednosti objektnega programiranja so:

-         ve�ja kakovost programov,

-         la�je vzdr�evanje programov,

-         ve�ja zmo�nost spreminjanja programov in

-         ponovna uporaba programov.

 

objektno orientiran jezik = objekti + razredi + dedovanje

 


Objekti in razredi

Klju�na pojma v objektnem programiranju sta objekt (ang. object) in razred (ang. class). �e pogledamo naokoli (pa naj bo to kar ra�unalni�ka miza), lahko vidimo ve� objektov. Pred vami je va� delovni ra�unalnik, torej objekt. Ra�unalnik med drugim vsebuje mi�ko in tipkovnico, torej dva objekta. Tipkovnica je sestavljena iz mno�ice tipk, torej mno�ice objektov...

Na vsako konkretno zadevo, na vsak predmet, na vsako bitje lahko gledamo, kakor da je objekt.

 

Skupna zna�ilnost vsem tem objektom je, da imajo:

-         stanje,

-         obna�anje oz. vedenje.

 

V objektnem programskem jeziku stanje predstavimo s spremenljivkami, obna�anje pa z metodami (funkcije in procedure).

 

 

Za primer ra�unalnika bi lahko imeli naslednjo tabelo:

Stanje:

-         hitrost procesorja

-         koli�ina RAM pomnilnika

-         pri�gan ali ugasnjen ra�unalnik

Obna�anje:

-         pri�iganje ra�unalnika

-         uga�anje ra�unalnika

-         tiskanje dokumenta

 

To sedaj pretvorimo v spremenljivke in metode:

 

Stanje bi ponazorili z naslednjimi spremenljivkami:

int hitrostProcesorja;���� // hitrost procesorja v megahercih

int kolicinaPomnilnika; �� // koli�ina RAM pomnilnika v megabajtih

boolean prizgan; ��������� // true, �e je ra�unalnik pri�gan, sicer false

 

Obna�anje pa bi ponazorili z naslednjimi metodami:

void prizgiRacunalnik();��������������� // pri�iganje ra�unalnika

void ugasniRacunalnik(); �������������� // ugasni ra�unalnik

void natisniDokument(imeDokumenta); ��� // natisni dokument na tiskalnik

�

 

Zapis v javi:

 

class Racunalnik

{

�� // stanje (objektne spremenljivke)

�� int hitrostProcesorja; // hitrost procesorja v megahercih

�� int kolicinaPomnilnika; // koli�ina RAM pomnilnika v megabajtih

�� boolean prizgan; ������ // true, �e je ra�unalnik pri�gan, sicer false

 

�� // obna�anje (metode)

�� void PrizgiRacunalnik() // pri�iganje ra�unalnika

�� {

���� prizgan=true;

�� }

�

�� void UgasniRacunalnik() // ugasni ra�unalnik

�� {

���� prizgan=false;

�� }

}

 

Podan primer obna�anja in metode pa niso vse, kar se definira v razredu. Obi�ajno mu dodamo �e metode s katerimi povpra�ujemo po stanju:

int vrniHitrostProcesorja()

{

�� return(HitrostProcesorja);

}

 

stanje spreminjamo:

void NastaviHitrostProcesorja(int novaHitrost)

{

�� hitrostProcesorja=novaHitrost;

}

 

in metodo toString, ki pretvori objekt v niz (za predstavitev objekta):

String toString()

{

�� return hitrostProcesorja+" "+kolicinaPomnilnika+" prizgan "+prizgan;

}

 

Poleg tega ima vsak razred tudi posebno metodo, ki jo imenujemo konstruktor. Ta metoda ima ime enako imenu razreda. Namen konstruktorja je, da dolo�i vrednosti objektnim spremenljivkam (ne nujno vsem, ampak kar pa� potrebujemo).

Lo�imo osnovni konstruktor (brez kakr�nih parametrov) in dodatne konstruktorje. Konstruktorjev je lahko poljubno mnogo, le razlikovati se morajo med seboj v parametrih, ki jih sprejmejo.

 

Primer osnovnega konstruktorja za ra�unalnik bi recimo bil naslednji:

Racunalnik()�� // osnovni konstruktor (konstruktor brez parametrov)

{

�� hitrostProcesorja=2000;

�� kolicinaPomnilnika=512;

�� prizgan=false;

}

 

Iz zapisa je razvidno, da je ime metode, ki predstavlja konstruktor enako imenu razreda, ta konstruktor dolo�i vrednosti spremenljivkam hitrostProcesorja, kolicinaPomnilnika in prizgan.

 

Te vrednosti se torej dolo�ijo avtomatsko in nanje ne moremo vplivati. Lahko pa poskrbimo, da pri kreiranju objekta vplivamo na dolo�ene vrednosti spremenljivk. Tiste, na katere �elimo vplivati, na�tejemo kot parametre konstruktorja (torej parametre metode).

 

Dodatni konstruktor bi recimo bil:

 

Racunalnik(int hitProc, int kolPom) // dodatni konstruktor

{

�� // parameter konstruktorja je hitrost procesorja in koli�ina pomnilnika

�� hitrostProcesorja=hitProc;

�� kolicinaPomnilnika=kolPom;

�� prizgan=false;

}

 

Po definiciji konstruktor ne vra�a vrednosti.

 

�e konstruktorja ne definiramo ga avtomati�no kreira prevajalnik sam.

 


Objekti

Deklaracija razreda Racunalnik ne ustvari objekta temve� je le neke vrste �ablona zanj (lahko bi tudi rekli nek novi "podatkovni" tip). Spremenljivkam, ki po tipu ustrezajo takemu razredu pravimo objekti tega razreda.

 

Objekte kreiramo z operatorjem new, ki mu posredujemo tip objekta in morebiti �e parametre s katerimi inicializiramo objektne spremenljivke. Po dodelitvi prostora in inicializaciji operator new vrne referenco na objekt:

 

Racunalnik pentium=new Racunalnik(); �� ������ // ustvarimo objekt pentium

Racunalnik amd=new Racunalnik(2600, 512); ���� // ustvarimo objekt amd

 

 

Faze �ivljenjskega cikla java objektov so torej naslednje:

-          deklaracija

ImeRazreda imeObjekta;

-          kreiranje z�new

new ImeRazreda(seznamParametrov);

-          deklaracijo in kreiranje lahko zdru�imo

ImeRazreda imeObjekta=new ImeRazreda(seznamParametrov);

-          uporaba objekta in pro�enje metod

imeObjekta.imeMetode(parametri);

-          uni�enje (garbage collector)

 

 

objekt = podatki + metode za delo s podatki

 

Razred Racunalnik

class Racunalnik

{

�� // stanje

�� int hitrostProcesorja; // hitrost procesorja v megahercih

�� int kolicinaPomnilnika; // koli�ina RAM pomnilnika v megabajtih

�� boolean prizgan; ������ // true, �e je ra�unalnik pri�gan, sicer false

��

 

�� Racunalnik()�� // osnovni konstruktor

�� {

���� hitrostProcesorja=2000;

���� kolicinaPomnilnika=512;

���� prizgan=false;

�� }

 

�� Racunalnik(int hitProc, int kolPom) // dodatni konstruktor

�� {

���� hitrostProcesorja=hitProc;

���� kolicinaPomnilnika=kolPom;

���� prizgan=false;

�� }

 

�� // obna�anje (metode)

�� void PrizgiRacunalnik() // pri�iganje ra�unalnika

�� {

���� prizgan=true;

�� }

�

�� void UgasniRacunalnik() // ugasni ra�unalnik

�� {

���� prizgan=false;

�� }

}

��

 

// Primer uporabe razreda

class Primer

{

�� public static void main (String[] args)

�� {

���� Racunalnik ibm=new Racunalnik();� // ustvarimo novi objekt

���� ibm.hitrostProcesorja=1000;

���� ibm.kolicinaPomnilnika=256;

 

���� ibm.PrizgiRacunalnik();� // vklju�i ra�unalnik

����������

���� // izpis

���� System.out.println("Hitrost CPU: "+ ibm.hitrostProcesorja);� // 1000

���� System.out.println("Hitrost CPU: "+ ibm.kolicinaPomnilnika); // 256

 

���� // ustvarimo nov objekt z uporabo dodatnega konstruktorja

���� Racunalnik compaq=new Racunalnik(2600, 512);

���� System.out.println("Hitrost CPU: "+ compaq.hitrostProcesorja); // 2600

���� System.out.println("Hitrost CPU: "+ compaq.kolicinaPomnilnika); // 512

� }

}

 

 

 

Izdelajmo razred Oseba, ki naj predstavlja neko osebo z naslednjimi podatki: ime, priimek in spol ( "m" naj predstavlja mo�ki,� "�" za �enski spol).

 

class Oseba

{

�� String ime;

�� String priimek;

�� String spol;

 

�� public Oseba()� // osnovni konstruktor

�� {

���� ime="";

���� priimek="";

���� spol="";

�� }

 

�� public Oseba(String i, String p, String s) // dodatni konstruktor

�� {

���� ime=i;

���� priimek=p;

���� spol=s;

�� }

}

 

// Primer uporabe razreda Oseba

public class Primer

{

�� public static void main(String args[])

�� {

���� Oseba a=new Oseba();

���� a.ime="Janez";� // vnos podatkov

���� a.priimek="Novak";

���� a.spol="m";

���� System.out.println(a.ime+" "+a.priimek+" "+a.spol); // izpis podatkov

����

���� // podatke vnesemo v dodatnem konstruktorju

���� Oseba b=new Oseba("Petra", "Petrovi�", "�");

���� System.out.println(b.ime+" "+b.priimek+" "+b.spol); // izpis podatkov

�� }

}

 

�e dobro premislimo lahko hitro ugotovimo, da ima razred Oseba majhno nedore�enost � kaj se bo namre� zgodilo �e za spol namesto znakov m oz. � vnesemo katerikoli drug znak?�

Ni� - saj razred ne preverja vrednosti, ki jih vnesemo.

Razred bi lahko "popravili" tako, da bi pri vnosu spola preverjali, �e je ta veljaven. Kako to naredimo bomo spoznali v naslednjem poglavju (javnost / privatnost).

 

Razred Oseba bi obi�ajno uporabili v programu, kjer bi �eleli obdelovati celo mno�ico oseb. Za tak primer bi lahko uporabili tabelo objektov:

 

class Oseba

{

�� String ime;

�� String priimek;

�� String spol;

 

�� public Oseba()� // osnovni konstruktor

�� {

���� ime="";

���� priimek="";

���� spol="";

�� }

 

�� public Oseba(String i, String p, String s) // dodatni konstruktor

�� {

���� ime=i;

���� priimek=p;

���� spol=s;

�� }

}

 

// Primer uporabe tabele objektov

public class Primer

{

�� public static void main(String args[])

�� {

���� Oseba[] a=new Oseba [3];�

���� // rezervirali smo pomnilnik za 3 objekte Oseba.

 

���� // s tem objektov �e nismo ustvarili, ampak le reference na njih

���� a[0]=new Oseba ();� // ustvarimo novi objekt

���� a[0].ime="Janez";

���� a[0].priimek="Novak";

���� a[0].spol="m";

 

���� a[1]=new Oseba ("Petra", "Kosec", "�");� // ustvarimo novi objekt

���� a[2]=new Oseba ("Nata�a", "Petek", "�");� // ustvarimo novi objekt

 

���� // izpis vrednsoti vseh treh objektov

���� for (int i=0; i<3; i++)

������� System.out.println(a[i].ime+" "+a[i].priimek+" "+a[i].spol);

�� }

}

 


Javnost / privatnost (enkapsulacija)

Ko enkrat dolo�imo kaj so objektne spremenljivke in kaj metode, se odlo�amo �e o temu, kak�no naj bo skrivanje elementov razreda oziroma kaj je javnega (public) in kaj privatnega (private) zna�aja. Za nekatere spremenljivke ali metode namre� �elimo, da se lahko uporabljajo samo znotraj metod in na to�no dolo�enih mestih, ne pa popolnoma poljubno.

 

Recimo da bi na�emu razredu o ra�unalniku dodali metodo, kjer pri�gemo ra�unalnik:

 

void prizgiRacunalnik()

{

�� vklopiNapajalnik();

�� resetirajMaticnoPlosco();

�� preberiPodatkeIzBIOSa();

�� prizgan=true;

}

 

V metodi bi torej, �e bi zares pri�gali ra�unalnik, poklicali �e tri metode (vklopiNapajalnik, resetirajMaticnoPlosco in preberiPodatkeIzBIOSa), ki pa imajo popolnoma privaten zna�aj. Z drugimi besedami, �e bodo te metode �e kdaj poklicane, �elimo da se to zgodi samo v tem primeru, ne pa tudi recimo, da bi nekdo poklical metodo za resetiranje mati�ne plo��e po tiskanju dokumenta.

Enako velja za spremenljivke; kar ne �elimo, da bi nekdo uporabljal izven metod, dolo�imo da je privatnega zna�aja.

 

Javnost oz. privatnost spremenljivk in metod dolo�imo z naslednjimi dolo�ili:

-         public� tako deklarirane spremenljivke in metode so dostopne vsepovsod,

-         private� dostopne so samo v razredu, ki jih vsebuje,

-         protected� dostopne so v razredu, ki jih vsebuje in v vseh podrazredih.

 

Dopolnjen razred Racunalnik, v katerem upo�tevamo javnost oz. privatnost spremenljivk in metod, bi izgledal tako:

 

class Racunalnik

{

�� private boolean prizgan; // true, �e je ra�unalnik pri�gan, sicer false

 

�� public Racunalnik()���� // konstruktor

�� {

���� prizgan=false;

�� }

�

�� // metode

�� private void vklopiNapajalnik()

�� {

���� ...;

�� }

 

�� private void resetirajMaticnoPlosco()

�� {

���� ...;

�� }

 

�� private void preberiPodatkeIzBIOSa()�

�� {

���� ...;

�� }

 

�� public void prizgiRacunalnik()������� // pri�iganje ra�unalnika

�� {

���� vklopiNapajalnik();��� // klic privatne metode

���� resetirajMaticnoPlosco();

���� preberiPodatkeIzBIOSa();

���� prizgan=true;

�� }

�

�� public void ugasniRacunalnik()������� // ugasni ra�unalnik

�� {

���� prizgan=false;

�� }

}

 

Spremenljivke in metode, ki imajo spredaj besedo private lahko uporabljamo oz. kli�emo samo znotraj razreda

 

 

Uporabimo sedaj razred na primeru:

 

class Primer

{

�� public static void main (String[] args)

�� {

���� Racunalnik ibm=new Racunalnik();

���� ibm.prizgan=true;��� // !!! napaka !!!

�� }

}

 

Program bo javil napako. Ker je spremenljivka prizgan privatna jo lahko uporabljamo samo znotraj razreda v katerem je definirana. �e bi bila javna (public) bi jo v glavnem programu lahko spremenili na true, tak�en objekt pa ne bi deloval tako, kot smo predvideli v razredu Racunalnik. Na� razred namre� zahteva, da se pri vklopu prvo izvr�ijo dolo�ene metode �ele nato se prizgan postavi na true. Torej ra�unalnik lahko pravilno "pri�gemo" samo z javno metodo prizgiRacunalnik().

Enako kot za spremenljivke velja tudi za metode. �e �elimo, da dolo�ene metode niso vidne zunaj razreda, jih deklariramo kot privatne (private).

 

Get / Set metode

Definirajmo razred Cas, ki naj predstavlja trenutni �as (ure in minute):

 

class Cas

{

�� private int ura;

�� private int minuta;

 

�� // osnovni konstruktor

�� public Cas()

�� {

���� ura=0;

���� minuta=0;

�� }

}

 

Ker sta obe objektni spremenljivki privatni, sta za na�e programe nedosegljivi. �e �elimo torej tak razred uporabljati mu moramo dodati tako imenovane get/set metode. To so javne (public) metode s katerimi vra�amo (get) vrednosti privatnih objektnih spremenljivk ali jih nastavljamo (set). S temi metodami obi�ajno tudi preverjamo, �e so podatki v mejah, ki jih zahtevamo. (Npr.: ure 0..23, minute 0..59 itd.)

 

class Cas

{

�� private int ure;

�� private int minute;

��

�� public Cas()� // konstruktor

�� {

���� ure=0;

���� minute=0;

�� }

 

�� // get metode

�� public int vrniUre()

�� {

���� return ure;

�� }

 

�� public int vrniMinute()

�� {

���� return minute;

�� }

 

�� // set metode

�� public void nastaviUre(int u)

�� {

���� if (u>=0 && u<24)

������� ure=u;

���� else

������� // vnos je napa�en => vrnemo napako ali ignoriramo vrednost...

�� }

 

�� public void nastaviMinute(int m)

�� {

���� if (m>=0 && m<60)

������� minute=m;

���� else

������� // vnos je napa�en => vrnemo napako ali ignoriramo vrednost...

�� }

}

Z uporabo privatnih spremenljivk in metod v razredih (enkapsulacija) dose�emo, da se na�i objekti obna�ajo tako, kot smo to predvideli v razredu.

 


Prekrivanje metod

Pri objektih se pogosto sre�amo s prekrivanjem metod (ang. overloading) - kar pomeni, da imamo ve� metod, ki imajo enako ime, vendar razli�no signaturo (metode med seboj razlikujejo po tipih parametrov, ki jih prejmejo. (Podobno zadevo smo sre�ali �e pri konstruktorjih, ki imajo ravno tako vsi enaka imena, razlikujejo se pa po parametrih, ki jih prejmejo).

 

 

public int sestej(int a, int b)

{

�� return (a+b);

}

 

public int sestej(int a, int b, int c)

{

�� return (a+b+c);

}

 

public double sestej(double a, double b)

{

�� return (a+b);

}

 

 

�e v razredu uporabimo ve� metod z enakimi imeni (prekrivanje) se morajo te razlikovati med seboj po �tevilu parametrov in/ali tipu parametrov, ki jih prejmejo.

Tip, ki ga metode vra�ajo, pri prekrivanju metod, ne igra nobene vloge.

 


Razredne spremenljivke in metode (static)

Razredne spremenljivke ozna�imo s static in predstavljajo skupne podatke za vse primerke dolo�enega razreda, njihova inicializacija pa se izvr�i samo enkrat.

 

Rezervirano besedo static uporabljamo tudi za ozna�evanje razrednih metod. Te lahko uporabimo oziroma pro�imo, �etudi ne obstaja niti en primerek razreda, saj se lahko na njih sklicujemo s pomo�jo imena razreda.

 

Razredu Oseba bomo dodali �tevec vseh ustvarjenih objektov (oseb).

 

class Oseba

{

�� String ime, priimek, spol;

�� static int st_oseb=0; // razredna spremenljivka �tevilo oseb

 

�� public Oseba()� // osnovni konstruktor

�� {

���� ime=""; priimek=""; spol="";

���� st_oseb++;� // ob vsakem klicu konstruktorja povecamo �tevilo oseb za 1

�� }

 

�� public Oseba(String i, String p, String s)� // dodatni konstruktor

�� {

���� ime=i; priimek=p; spol=s;

���� st_oseb++;

�� }

 

�� // razredna metoda

�� static int getSteviloOseb()

�� {

���� return st_oseb;

�� }

}

 

// Primer uporabe

public class Primer

{

�� public static void main(String args[])

�� {

���� // izpis �tevila oseb - na metodo se sklicujemo kar s pomo�jo imena razreda

���� System.out.println("Trenutno stevilo oseb: "+Oseba.getSteviloOseb());� // 0

����

���� Oseba b=new Oseba("Petra", "Petrovi�", "�");

���� System.out.println(b.ime+" "+b.priimek+" "+b.spol);� // izpis podatkov

���� System.out.println("Trenutno stevilo oseb: "+Oseba.getSteviloOseb());� // 1

�� }

}

 


Dedovanje

Dedovanje je eden od pomembnej�ih principov objektnega programiranja. V implementacijah se nam lahko pojavi mno�ica razredov, ki se med seboj le malo razlikujejo (dopolnjujejo v kodi ali pa druga�e implementirajo del kode) in jih je smiselno zaradi urejenosti in pregleda ustrezno hierarhi�no urediti. Obi�ajno se uporabljajo postopki dedovanja (ang. inheritance), kjer izpeljani razredi (in temu primerno potem tudi objekti) podedujejo nekatere lastnosti, podatke in operacije od drugih razredov.

 

Na primer, imamo nek razred A, predstavljen z dolo�eno mno�ico spremenljivk in metod, zatem pa �elimo napisati nov razred B, ki je v skoraj vsem enak, le da ima �e eno dodatno spremenljivko. Namesto, da bi ponovno pisali isto kodo in le dodali eno vrstico zaradi te dodatne spremenljivke, lahko preprosteje dolo�imo, da ima razred B vse lastnosti in metode enake kot razred A, razlika je le dodatna spremenljivka. Pravimo, da smo razred B izpeljali iz razreda A oziroma, da je razred A nadrazred (superrazred) razredu B.

 

Primer

Spomnimo se razreda Oseba, ki smo ga definirali na za�etku in je predstavljal neko osebo (ime, priimek in spol). Sedaj bi �eleli ustvariti nov razred Student, ki bo predstavljal podatke o poljubnem �tudentu: ime, priimek, spol ter zraven �e vpisno �tevilko. Kot vidimo se razreda med seboj le malo razlikujeta, zato je smiselno, da razred Student ustvarimo tako, da le raz�irimo razred Oseba, ki je �e narejen od prej:

 

class Oseba

{

�� String ime, priimek, spol;

 

�� public Oseba()� // osnovni konstruktor

�� {

���� ime="";

���� priimek="";

���� spol="";

�� }

 

�� public Oseba(String i, String p, String s) // dodatni konstruktor

�� {

���� ime=i;

���� priimek=p;

���� spol=s;

�� }

}

 

class Student extends Oseba

{

�� int vpisna_st;

 

�� Student(String i, String p, String s, int vs)� // dodatni konstruktor

�� {

���� super(i, p, s);� // kli�emo konstruktor nadrazreda Oseba

���� this.vpisna_st=vs;

�� }

}

 

// Primer uporabe razreda Student

public class Primer

{

�� public static void main(String args[])

�� {

���� Student b=new Student("Petra", "Petrovi�", "�", 12345);

���� // izpis podatkov

���� System.out.println(b.ime+" "+b.priimek+" "+b.spol+" "+b.vpisna_st);

�� }

}

 

Razred Student smo definirali tako, da smo v dodatnem konstruktorju prvo z besedo super poklicali konstruktor nadrazreda Oseba s podatki ime, priimek in spol; nato pa �e vnesli podatek o vpisni �tevilki v razred Student.

 

V javi izpeljavo iz nadrazreda dolo�imo z besedo extends

 

S pomo�jo rezerviranih besed this in super lahko dostopamo in se sklicujemo na nadrazred ali pa na objekt sam in sicer:

 

-          this�pomeni nana�anje na trenutni primerek tega razreda

this.imeSpremenljivke;

this.imeMetode();

-          super�pomeni nana�anje na nadrazred

super.ImeSpremenljivke;

super.ImeMetode();

 

Vsak podrazred avtomatsko kli�e osnovni konstruktor svojega nadrazreda, zato klic super v konstruktorjih podrazreda uporabimo le, �e kli�emo dodatne konstruktorje nadrazreda (tiste z argumenti).

 

V javi so vsi razredi izpeljani iz razreda java.lang.Object

 

Nadome��anje metod

Izpeljani razredi lahko torej spremenljivkam in metodam, ki so jih podedovali, dodajo �e svoje lastne. Lahko pa tudi nadomestijo (ang. override) podedovane metode tako, da jih na novo realizirajo.

 

Primer

class Krog

{

�� private double polmer;� // polmer kroga

�

�� public Krog(double r)�� // konstruktor

�� {

���� polmer=r;

�� }

��

�� public void nastaviPolmer(double polmer)

�� {

���� this.polmer=polmer; // ker ima argument metode isto ime kot objektna

�� } ��������������������� // spremenljivka (polmer) uporabimo besedo this

 

�� public double vrniPolmer()

�� {

���� return polmer;

�� }

�

�� public double vrniPloscino()

�� {

���� return 3.14*polmer*polmer; // vrne plo��ino kroga

�� }

}

 

class Odsek extends Krog

{

�� public Odsek(double r)� // konstruktor

�� {

���� super(r); // kli�emo konstruktor nadrazreda Krog

�� }

�

�� public double vrniPloscino(double kot)� // Nadomestimo (overriding) metodo

�� { ����������������������������������� ���// vrniPloscino iz nadrazreda

���� return super.vrniPloscino()*kot/360; // plo��ina kro�nega izseka - plo��ino

�� } ����������������������������������� ���// izra�una metoda iz nadrazreda Krog

}

 


Abstraktni razredi

Pri dedovanju se ve�krat sre�amo s pojmom abstraktni razredi. Z abstraktnimi razredi definiramo samo del implementacije in omogo�imo, da izpeljani razredi izdelajo specifi�no implementacijo. Uporabljamo jih predvsem pri posplo�itvah, kjer iz ve� razredov izpeljemo skupen nadrazred.

Npr. geometrijski liki imajo vsi definirano plo��ino, vendar za abstraktni pojem lika plo��ine ne moremo izra�unati oz. definirati.

 

Primer:

 

abstract class Lik

{

�� abstract public double ploscina(); // abstraktnaa metoda za izracun ploscine

}

 

class Kvadrat extends Lik��� // izpeljemo iz razreda Lik

{

�� private double a;������

�

�� public Kvadrat (double a)� // konstruktor

�� {

���� this.a=a;

�� }

 

�� public double ploscina()�� // konkretna metoda za izracun ploscine

�� {

���� return a*a;

�� }

}

 

class Test��� // testni program

{

�� public static void main(String[] args)

�� {

���� Lik kv=new Kvadrat(5.5);

���� System.out.println("Ploscina je: "+kv.ploscina());

�� }