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
|
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.
|
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);
�� }
}
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;
�� }
}
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).
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.
|
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 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
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
|
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
}
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());
�� }