Nasleđivanje (IS-A) u Javi /EXTENDS/

Nasleđivanje u Javi je mehanizam u kojem jedan objekat dobija sve osobine i ponašanja roditeljskog objekta. Ideja, koja stoji iza nasleđivanja u Javi, je ta da se mogu kreirati nove klase koje su izgrađene na postojećim klasama. Kada se nasleđuje iz postojeće klase, moguće je ponovo upotrebiti metode i polja /* atribute? */ roditeljske klase, a takođe je moguće dodati nove metode i polja. Nasleđivanje predstavlja IS-A relaciju, takođe poznatu i kao relacija Roditelj-Dete. Zbog čega se koristi nasleđivanje?
  • zbog preklapanja (overriding) metoda (takođe i polimorfizma u vremenu izvršavanja)
  • zbog ponovne upotrebljivosti (reusability) koda
Sintaksa nasleđivanja
1
2
3
4
class Subclass-name extends Superclass-name 
  // metode i polja 
}
Ključna reč extends naznačava da se pravi nova klasa koja se izvodi iz postojeće klase.U terminologiji Jave, klasa koja se nasleđuje se naziva superklasa. Nova klasa se naziva subklasa.

Objašnjenje jednostavnog primera nasleđ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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 primeru, objekat Programmer može pristupiti polju svoje klase, a takođe i polju klase Employee tj. imamo ponovnu upotrebljivost koda.

Tipovi nasleđivanja

Po osnovu klase, u Javi mogu postojati tri tipa nasleđivanja: jednostruko, višeg nivoa (multilevel) i hijerarhijsko. U Java programiranju, višestruko i hibridno nasleđivanje je podržano samo preko interfejsa, o čemu će biti reči kasnije. Napomena: Višestruko nasleđivanje nije podržano u Javi u slučaju klase. Kada jednu klasu nasleđuje više klasa to je poznato kao višestruko nasljeđivanje, npr.:

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

Da bi se redukovala kompleksnost i pojednostavio jezik, višestruko nasleđivanje nije podržano u Javi. Razmotrimo scenario gde su A, B i C tri klase. Klasa C nasleđuje klase A i B. Ako klase A i B imaju isti metod i on bude pozvan iz objekta klase-deteta, 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 nasledimo 2 klase. Dakle, bez obzira da li je metod isti ili različit, biće prijavljen compile time error.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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

Comments

comments