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