logo

Možemo li nadjačati statičku metodu u Javi?

U Javi, nadjačavajući i preopterećenje dvije su najvažnije značajke objektno orijentirano programiranje . Značajka se koristi kada programer želi postići polimorfizam . Pitanje, možemo li nadjačati statičku metodu u Javi ili možete li preopteretiti statičku metodu u Javi su dva najvažnija pitanja postavljena u Java intervju . U ovom odjeljku ćemo ukratko razumjeti preopterećenje i nadjačavanje. Objasnili smo i odgovor zašto ne možemo nadjačati statičku metodu u Javi?

Statička metoda

Metoda koja ima statičku ključnu riječ prije naziva metode poznata je kao a statička metoda . Također je poznat kao a metoda na razini razreda . Kopiju statičke metode dijele svi objekti klase.

 public static int sum() { } 

Možemo pozvati statičke metode korištenjem naziva klase. Na primjer, Math.abs(a) metoda . Metoda vraća apsolutnu vrijednost proslijeđenog argumenta. Statička metoda ne može pristupiti varijablama ili metodama instance.

Nadjačavanje metode

To je značajka objektno orijentirano programiranje . Koristi se za postizanje polimorfizma vremena izvođenja. Potklasa pruža specifičnu implementaciju metode koju već nudi njena nadređena klasa, poznata kao nadjačavanje metode. Potpis metode u roditeljskoj i podređenoj klasi mora biti isti. U nadjačavanje metode , koja metoda će se izvršiti, odlučuje se tijekom izvođenja. Odluka se donosi prema objektu koji smo pozvali.

Preopterećenje metode

To je također značajka objektno orijentiranog programiranja. Koristi se za postizanje polimorfizma u vrijeme kompajliranja. Omogućuje nam korištenje istog naziva metode, ali različitih potpisa. Ako klasa ima više od jedne metode s istim imenom, ali različitim potpisom metode, poznata je kao preopterećenje metode .

Naučili smo što je preopterećujuće i najvažnije. Sada prelazimo na stvar.

Možemo li preopteretiti statičku metodu?

Odgovor je Da . Možemo preopteretiti statičke metode. Ali zapamtite da potpis metode mora biti drugačiji. Na primjer, razmotrite sljedeći Java program.

OverloadStaticMethodExample1.java

 public class OverloadStaticMethodExample1 { //static method public static void display() { System.out.println('Static method called.'); } //overloaded static method public static void display(int x) { System.out.println('An overloaded static method called.'); } //main method public static void main(String args[]) { //calling static method by using the class name OverloadStaticMethodExample1.display(); OverloadStaticMethodExample1.display(160); } } 

Izlaz:

 Static method called. An overloaded static method called. 

Ovdje se postavlja pitanje koje možemo li preopteretiti metode ako se razlikuju samo po statičkoj ključnoj riječi.

Odgovor je Ne. Ne možemo nadjačati dvije metode ako se razlikuju samo statičnom ključnom riječi. Na primjer, razmotrite sljedeći Java program.

OverloadStaticMethodExample2.java

 public class OverloadStaticMethodExample2 { //static method public static void sum(int a, int b) { int c=a+b; System.out.println('The sum is: '+c); } //non-static method public void sum(int a, int b) { int c=a+b; System.out.println('The sum is: '+c); } //main method public static void main(String args[]) { //calling static method by using the class name OverloadStaticMethodExample2.sum(12, 90); } } 

Kada prevedemo gornji program, on pokazuje sljedeću pogrešku.

 error: method sum(int,int) is already defined in class OverloadStaticMethodExample2 

Možemo li nadjačati statičku metodu?

Ne, ne možemo nadjačati statičke metode jer se nadjačavanje metode temelji na dinamičkom povezivanju tijekom izvođenja, a statičke metode su povezane pomoću statičkog povezivanja za vrijeme kompilacije. Dakle, ne možemo nadjačati statičke metode.

Pozivanje metode ovisi o vrsti objekta koji poziva statičku metodu. To znači:

  • Ako pozovemo statičku metodu pomoću objekta nadređene klase, izvorna statička metoda bit će pozvana iz nadređene klase.
  • Ako pozovemo statičku metodu pomoću objekta podređene klase, bit će pozvana statička metoda podređene klase.

U sljedećem primjeru, ParentClass ima statičnu metodu pod nazivom display(), a ChildClass također ima isti potpis metode. Metoda u izvedenoj klasi (ChildClass) skriva metodu u osnovnoj klasi. da vidimo primjer.

OverloadStaticMethodExample3.java

 public class OverloadStaticMethodExample3 { public static void main(String args[]) { ParentClass pc = new ChildClass(); //calling display() method by parent class object pc.display(); } } //parent class class ParentClass { //we cannot override the display() method public static void display() { System.out.printf('display() method of the parent class.'); } } //child class class ChildClass extends ParentClass { //the same method also exists in the ParentClass //it does not override, actually it is method hiding public static void display() { System.out.println('Overridden static method in Child Class in Java'); } } 

Izlaz:

 display() method of the parent class.