Statičko i dinamičko povezivanje
Veza poziva metode sa telom metode se naziva povezivanje. Postoje dva tipa povezivanja
- statičko povezivanje (poznato i kao rano povezivanje).
- dinamičko povezivanje (poznato i kao kasno povezivanje).
Pojam tipa
Podsetimo se pojma tipa instance
1) Promenljive imaju tip Svaka promenljiva ima tip, koji može biti primitivan ili ne-primitivan.
1 | int data= 30 ; |
Ovde je promenljiva data tipa int.
2) Reference imaju tip
1 2 3 4 5 | class Dog{ public static void main(String args[]){ Dog d1; //Ovde je d1 tipa Dog } } |
3) Objekti imaju tip Objekat je instanca određene Java klase, ali je takođe instanca svoje superklase.
1 2 3 4 5 6 7 | class Animal{} class Dog extends Animal{ public static void main(String args[]){ Dog d1= new Dog(); } } |
Ovdje je d1 instanca klase Dog, ali je takođe instanca klase Animal.
Statičko povezivanje
Kada je tip objekta određen u vremenu kompajliranja (od strane kompajlera), to je poznato kao statičko povezivanje. Ako u klasi postoji bilo koja private, final ili static metoda, postoji i statičko povezivanje. Primer statičkog povezivanja:
1 2 3 4 5 6 7 | class Dog{ private void eat(){System.out.println( "dog is eating..." );} public static void main(String args[]){ Dog d1= new Dog(); d1.eat(); } } |
Dinamičko povezivanje
Kada je tip objekta određen u vremenu izvršavanja (runtime), to je poznato kao dinamičko povezivanje. Primer dinamičkog povezivanja:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class Animal{ void eat(){System.out.println( "animal is eating..." );} } class Dog extends Animal{ void eat(){System.out.println( "dog is eating..." );} public static void main(String args[]){ Animal a= new Dog(); a.eat(); } } Ispis na ekranu: dog is eating... |
U ovom primeru tip objekta ne može odrediti kompajler, zato što je instanca klase Dog takođe instanca klase Animal. Tako kompajler ne zna njen tip, već samo njen osnovni tip.