logo

Kan vi overstyre statisk metode i Java?

I Java, overordnet og overbelastning er de to viktigste egenskapene til Objektorientert programmering . Funksjonen brukes når programmereren ønsker å oppnå polymorfisme . Spørsmålet, kan vi overstyre statisk metode i Java eller kan du overbelaste statisk metode i Java er de to viktigste spørsmålene som stilles i Java-intervju . I denne delen vil vi kort forstå overbelastning og overstyring. Vi har også forklart svaret på hvorfor kan vi ikke overstyre den statiske metoden i Java?

Statisk metode

Metoden som har et statisk nøkkelord før metodenavnet er kjent som en statisk metode . Det er også kjent som en metode på klassenivå . En kopi av den statiske metoden deles av alle objektene i klassen.

 public static int sum() { } 

Vi kan påkalle statiske metoder ved å bruke klassenavnet. For eksempel, Math.abs(a) metode . Metoden returnerer den absolutte verdien av det beståtte argumentet. Den statiske metoden kan ikke få tilgang til forekomstvariabler eller metoder.

Metodeoverstyring

Det er et trekk ved Objektorientert programmering . Det brukes til å oppnå polymorfisme under kjøring. Underklassen gir en spesifikk implementering av en metode som allerede er levert av dens overordnede klasse, kjent som metodeoverstyrende. Signaturen til metoden i foreldre- og barneklassen må være den samme. I metodeoverstyrende , hvilken metode som skal utføres, bestemmes under kjøring. Avgjørelsen tas i henhold til objektet som vi ringte.

Metode Overbelastning

Det er også en funksjon ved objektorientert programmering. Det brukes til å oppnå kompileringstidspolymorfisme. Det lar oss bruke samme metodenavn, men forskjellige signaturer. Hvis en klasse har mer enn én metode med samme navn, men en annen metodesignatur, er den kjent som metode overbelastning .

Vi har lært hva som er overbelastning og overordnet. Nå går vi til poenget.

Kan vi overbelaste en statisk metode?

Svaret er Ja . Vi kan overbelaste statiske metoder. Men husk at metodesignaturen må være annerledes. Tenk for eksempel på følgende 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); } } 

Produksjon:

 Static method called. An overloaded static method called. 

Her dukker det opp et spørsmål kan vi overbelaste metodene hvis de bare er forskjellige ved statisk nøkkelord.

Svaret er Nei. Vi kan ikke overstyre to metoder hvis de bare er forskjellige med statiske nøkkelord. Tenk for eksempel på følgende 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); } } 

Når vi kompilerer programmet ovenfor, viser det følgende feil.

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

Kan vi overstyre en statisk metode?

Nei, vi kan ikke overstyre statiske metoder fordi metodeoverstyring er basert på dynamisk binding ved kjøring og de statiske metodene er bundet ved hjelp av statisk binding ved kompilering. Så vi kan ikke overstyre statiske metoder.

Anropet av metoden avhenger av typen objekt som kaller den statiske metoden. Det betyr:

  • Hvis vi kaller en statisk metode ved å bruke det overordnede klasseobjektet, vil den opprinnelige statiske metoden kalles fra den overordnede klassen.
  • Hvis vi kaller en statisk metode ved å bruke barneklasseobjektet, vil den statiske metoden til barneklassen kalles.

I det følgende eksempelet har ParentClass en statisk metode kalt display() og ChildClass har også samme metodesignatur. Metoden i den avledede klassen (ChildClass) skjuler metoden i basisklassen. la oss se et eksempel.

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'); } } 

Produksjon:

 display() method of the parent class.