Nasleđivanje klasa
NASLEĐIVANJE KLASE
1
UNIVERZITET U PRIŠTINI
PRIRODNO-MATEMATIČKI FAKULTET
KOSOVSKA MITROVICA
SEMINARSKI RAD
Tema:
Nasleđivanje klasa
( klijent-server sistemi )
Mentor
Kantidat
Marko Smiljić
Marko Rusimović
Kosovska Mitrovica, 2014. godine
NASLEĐIVANJE KLASE
2
Sadržaj
1.Nasleđivanje
klasa.....................................................................3
1.1.Osnovni
pojmovi.....................................................................
3
1.2.Hijerarhija
klasa...................................................................11
1.3.Slu bena
re
ž
č
super................................................................19
1.4.Klasa
Object.......................................................................
..26
1.5.Polimorfizam...........................................................
.............30
LITERATURA

NASLEĐIVANJE KLASE
4
Treba imati u vidu da terminologija u vezi sa nasledivanjem klasa nije
standardizovana. Uglavnom iz istorijskih razloga, ali i licnih a niteta autora, u
fi
upotrebi su razliciti termini koji su sinonimi za polaznu klasu i klasu naslednicu:
osnovna i pro irena klasa, bazna i izvedena klasa, natklasa i potklasa, klasa
š
roditelj i klasa dete, pa i nadredena i podredena klasa.
U svakodnevnom radu, narocito za programere koji su tek poceli da
seupoznaju sa objektno orijentisanim pristupom, nasledivanje se koristi
uglavnom za menjanje vec
/ postojec
/e klase koju treba prilagoditi sa nekoliko
izmena ili dopuna. To je mnogo ce c
/a situacija nego pravljenje kolekcije klasa i
š
pro irenih klasa od pocetka.
š
De nicija nove klase koja pro iruje postojec
/u klasu ne razlikuje se mnogo
fi
š
od uobicajene de nicije obicne klase:
fi
modifikatori
class
nova-klasa
extends
stara-klasa
{
*
* // Izmene ili dopune postojec
/e klase
*
}
U ovom op tem obliku, nova-klasa je ime nove klase koja se de ni e, a
š
fi š
stara-klasa je ime postojec
/e klase koja se pro iruje. Telo nove klase izmedu
š
viticastih zagrada ima istu strukturu kao telo neke uobicajene klase. Prema
tome, jedina novost kod nasledivanja klase je pisanje slu bene reci extends i
ž
imena postojec
/e klase iza imena nove klase. Na primer, kostur definicije klase B
koja nasleduje klasu A ima ovaj izgled:
class B extends A {
*
* // Novi lanovi klase B
č
ili izmene
* // postojec
/ih lanova klase A
č
*
}
Su tinu i prednosti nasledivanja klasa je najbolje objasniti na nekom
š
primeru. Posmatrajmo zato program za obracun plata radnika neke firme i
NASLEĐIVANJE KLASE
5
razmotrimo klasu koja mo e predstavljati te radnike u kontekstu obracuna
ž
njihovih plata. Ako zanemarimo enkapsulaciju podataka da ne bismo primer
komplikovali sa geter i seter metodima, prvi poku aj de nisanja klase Radnik
š
fi
mo e izgledati na primer:
ž
public class Radnik {
String ime; //
ime i prezime radnika
long jmbg;
//
jedinstven broj radnika
long ra un;
č
//
bankovni ra un radnika
č
double plata; //
plata radnika
public void uplatiPlatu() {
System.out.print("Plata za " + ime + ", broj " + jmbg);
System.out.println(" uplac
/ena na ra un " + ra
č
č
un);
}
public double izracunajPlatu() {
//
Obra unavanje mese ne plate radnika
č
č
}
}
Na prvi pogled izgleda da klasa Radnik dobro opisuje radnike za
obracunavanje njihovih mesecnih plata. Svaki radnik ima svoje ime, jedinstven
broj i racun u banci. Jedina dilema postoji oko metoda koji obracunava platu
radnika. Problem je u tome to u rmi mo e raditi vi e vrsta radnika u pogledu
š
fi
ž
š
nacina obracunavanja njihove mesecne plate.
Pretpostavimo da u rmi neki radnici imaju ksnu mesecnu zaradu, dok
fi
fi
su drugi plac
/eni po radnim satima po odredenoj ceni sata. Re enje koje nam se
š
odmah namec
/e, narocito ako dolazimo iz sveta proceduralnog programiranja,
jeste da klasi Radnik dodamo indikator koji ukazuje na to da li se radio jednoj ili
drugoj vrsti radnika. Ako dodamo logicko polje plac
/enPoSatu, na primer, onda

NASLEĐIVANJE KLASE
7
. . .
break;
}
}
Naravno, svaki put kada se u firmi zaposle novi radnici sa drugacijim
nacinom plac
/anja, mora se menjati ovaj metod za obracun plate i dodati novi
slucaj.
Bolje re enje, ali jo uvek ne i ono pravo, jeste da se klasa Radnik podeli u
š
š
dve (ili vi e) klasa koje odgovaraju vrstama radnika prema nacinu obracuna
š
njihove plate. Na primer, za radnike koji su mesecno plac
/eni fiksno ili po radnim
satima, mogu se de nisati dve klase na sledec
/i na in:
fi
č
public class RadnikPla´cenFiksno {
String ime;
//
ime i prezime radnika
long jmbg;
//
jedinstven broj radnika
long ra un;
č
//
bankovni raˇcun radnika
double plata; //
meseˇcna plata radnika
public void uplatiPlatu() {
System.out.print("Plata za " + ime + ", broj " + jmbg);
System.out.println(" uplac
/ena na ra un " + ra un);
č
č
}
public double izra unajPlatu()
č
{
return plata;
}
}
public class RadnikPlac
/enPoSatu {
String ime;
//
ime i prezime radnika
long jmbg;
//
jedinstven broj radnika
long ra un;
č
//
bankovni ra un radnika
č
Ovaj materijal je namenjen za učenje i pripremu, ne za predaju.
Slični dokumenti