8. Nasljeđivanje (IS-A) u Javi /EXTENDS/


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.

Objašnjenje jednostavnog primjera nasljeđivanja

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.

Tipovi nasljeđivanja

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.:

Zašto višestruko nasljeđivanje nije podržano u Javi?

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