10. Preklapanje (overriding) metoda u Javi

Ako podklasa (klasa-dijete) ima isti metod kakav je deklarisan u roditeljskoj klasi, to je poznato kao preklapanje (overriding) metoda u javi. Drugim riječima, ako podklasa obezbjeđuje specifičnu implementaciju metode koju je obezbijedila jedna od roditeljskih klasa, to je poznato kao preklapanje metoda. Upotreba preklapanja metoda

Pravila za preklapanje metoda

  1. metoda mora imati isto ime kao u roditeljskoj klasi.
  2. metoda mora imati isti parametar kao u roditeljskoj klasi.
  3. mora biti IS-A relacija (nasljeđivanje).

Bez preklapanja metoda

Problem koji se javlja bez preklapanja metoda Razmotrimo problem koji se javlja u programu ako ne koristimo preklapanje metode.

class Vehicle{
  void run(){System.out.println("Vehicle is running");}
}
class Bike extends Vehicle{
  
  public static void main(String args[]){
  Bike obj = new Bike();
  obj.run();
  }
}

Ispis na ekranu:
Vehicle is running

Problem je u tome da moramo obezbijediti specifičnu implementaciju metode run() u podklasi te stoga koristimo preklapanje metoda.

Preklapanje metoda

Primjer 1 preklapanja metoda U ovom primjeru, definisaćemo metodu run u podklasi onako kako je definisana u roditeljskoj klasi ali će imati neku specifičnu implementaciju. Ime i parametar metode su isti i postoji IS-A relacija između klasa, tako da postoji preklapanje metoda.

class Vehicle{  
void run(){System.out.println("Vehicle is running");}  
}  
class Bike2 extends Vehicle{  
  void run(){System.out.println("Bike is running safely");}  

  public static void main(String args[]){  
  Bike2 obj = new Bike2();  
  obj.run();  
  }
}

Ispis na ekranu:
Bike is running safely

Primjer 2 preklapanja metoda Razmotrimo sljedeći scenario: Bank je klasa koja obezbjeđuje funkcionalnost izračunavanja kamatne stope. Ali, kamatna stopa varira u zavisnosti od banke. Na primjer, banke FIRST, SECOND i THIRD mogu obezbijediti 8%, 7% i 9% kamatne stope.

class Bank{  
  int getRateOfInterest(){return 0;}  
}  
  
class FIRST extends Bank{  
  int getRateOfInterest(){return 8;}  
}  
  
class SECOND extends Bank{  
  int getRateOfInterest(){return 7;}  
}  

class THIRD extends Bank{  
  int getRateOfInterest(){return 9;}  
}  
  
class Test2{

  public static void main(String args[]){  
    FIRST s=new FIRST();  
    SECOND i=new SECOND();  
    THIRD a=new THIRD();  
    System.out.println("FIRST Rate of Interest: "+s.getRateOfInterest());  
    System.out.println("SECOND Rate of Interest: "+i.getRateOfInterest());  
    System.out.println("THIRD Rate of Interest: "+a.getRateOfInterest());  
  }  
}

Ispis na ekranu:
FIRST Rate of Interest: 8
SECOND Rate of Interest: 7
THIRD Rate of Interest: 9

Može li se preklopiti statička metoda? Ne, statička metoda se ne može preklopiti. O ovome će biti riječi kasnije, u dijelu koji se odnosi na polimorfizam u vremenu izvršavanja. Zašto se statička metoda ne može preklopiti? Zato što je statička metoda vezana za klasu dok je instansna metoda vezana za objekt. Može li se preklopiti java main metoda? Ne, zato što je main statička metoda. Razlika između preopterećenja metode i preklapanja metode u Javi Postoje tri osnovne razlike između preopterećenja metode i preklapanja metode. To su:
Preopterećenje metode Preklapanje metode
Preopterećenje metode se koristi da poboljša čitljivost programa Preklapanje metode se koristi da obezbijedi specifičnu implementaciju metode koju je već obezbijedila njena superklasa
Preopterećenje metode se izvodi unutar klase Preklapanje metode se javlja u dve klase koje imaju IS-A relaciju
U slučaju preopterećenja metode parametar mora biti različit U slučaju preklapanja metode parametar mora biti isti


Zadaci iz ovog poglavlja    Objektno orijentisano programiranje u Javi    Index