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

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 podklasa, a Employee je nadklasa. 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 nasleđ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

Close Menu
Show Buttons
Hide Buttons