Nasljeđivanje u Javi je mehanizam u kojem jedan objekt dobija sve osobine i ponašanja roditeljskog objekta. Ideja koja stoji iza nasljeđivanja u Javi je ta da se mogu kreirati nove klase koje su izgrađene na postojećim klasama. Kada se nasljeđuje iz postojeće klase, moguće je ponovo upotrijebiti metode i polja roditeljske klase, a takođe je moguće dodati nove metode i polja. Nasljeđivanje predstavlja IS-A relaciju, takođe poznatu i kao relacija Roditelj-Dijete. Zbog čega se koristi nasljeđivanje?
Sintaksa nasljeđivanja
class Subclass-name extends Superclass-name
{
// metode i polja
}
Ključna riječ extends naznačava da se pravi nova klasa koja se izvodi iz postojeće klase. U terminologiji Jave, klasa koja se nasljeđuje se naziva superklasa. Nova klasa se naziva subklasa.
Kao što je prikazano na slici, Programmer je subklasa, a Employee je superklasa. Relacija između dve klase je Programmer IS-A Employee. To znači da je Programmer tip od Employee.
class Employee{
float salary=40000;
}
class Programmer extends Employee{
int bonus=10000;
public static void main(String args[]){
Programmer p=new Programmer();
System.out.println("Programmer salary is:"+p.salary);
System.out.println("Bonus of Programmer is:"+p.bonus);
}
}
Ispis na ekranu:
Programmer salary is:40000.0
Bonus of programmer is:10000
U ovom primjeru, objekt Programmer može pristupiti polju svoje klase, a takođe i polju klase Employee tj. imamo ponovnu upotrebljivost koda.
Po osnovu klase, u Javi mogu postojati tri tipa nasljeđivanja: jednostruko, višenivosko (multilevel) i hijerarhijsko. U Java programiranju, višestruko i hibridno nasljeđivanje je podržano samo preko interfejsa, o čemu će biti riječi kasnije.
Napomena: Višestruko nasljeđivanje nije podržano u Javi u slučaju klase.
Kada jednu klasu nasljeđuje više klasa to je poznato kao višestruko nasljeđivanje. Napr.:
Da bi se redukovala kompleksnost i pojednostavio jezik, višestruko nasljeđivanje nije podržano u Javi. Razmotrimo scenario gdje su A, B i C tri klase. Klasa C nasljeđuje klase A i B. Ako klase A i B imaju isti metod i on bude pozvan iz objekta klase-djeteta, postojaće dvosmislenost da li je pozvan metod A ili B klase. Pošto su greške u vremenu kompajliranja (compile time error) bolje nego greške u vremenu izvršavanja (runtime error), Java će prijaviti compile time error ako naslijedimo 2 klase. Dakle, bez obzira da li je metod isti ili različit, biće prijavljen compile time error.
class A{
void msg(){System.out.println("Hello");}
}
class B{
void msg(){System.out.println("Welcome");}
}
class C extends A,B{
public static void main(String args[]){
C obj=new C();
obj.msg(); // Koji će msg() metod biti pozvan?
}
}
Ispis na ekranu:
Compile Time Error
Zadaci iz ovog poglavlja Objektno orijentisano programiranje u Javi Index
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |