logo

Kan vi tilsidesætte statisk metode i Java?

I Java, tilsidesættende og overbelastning er de to vigtigste træk ved objektorienteret programmering . Funktionen bruges, når programmøren ønsker at opnå polymorfi . Spørgsmålet, kan vi tilsidesætte statisk metode i Java eller kan du overbelaste statisk metode i Java er de to vigtigste spørgsmål stillet i Java interview . I dette afsnit vil vi kort forstå overbelastning og tilsidesættelse. Vi har også forklaret svaret vedr hvorfor kan vi ikke tilsidesætte den statiske metode i Java?

Statisk metode

Metoden, der har et statisk nøgleord før metodenavnet, er kendt som en statisk metode . Det er også kendt som en metode på klasseniveau . En kopi af den statiske metode deles af alle klassens objekter.

 public static int sum() { } 

Vi kan påberåbe statiske metoder ved at bruge klassenavnet. For eksempel, Math.abs(a) metode . Metoden returnerer den absolutte værdi af det beståede argument. Den statiske metode kan ikke få adgang til instansvariabler eller -metoder.

Metode tilsidesættelse

Det er et træk ved objektorienteret programmering . Det bruges til at opnå run-time polymorfi. Underklassen giver en specifik implementering af en metode, der allerede er leveret af dens overordnede klasse, kendt som metode tilsidesætte. Signaturen for metoden i forældre- og børneklassen skal være den samme. I metode tilsidesætte , hvilken metode der skal udføres, besluttes under kørslen. Beslutningen træffes i henhold til det objekt, som vi kaldte.

Metode Overbelastning

Det er også en funktion af objektorienteret programmering. Det bruges til at opnå kompileringstidspolymorfi. Det giver os mulighed for at bruge det samme metodenavn, men forskellige signaturer. Hvis en klasse har mere end én metode med samme navn, men en anden metodesignatur, er den kendt som metode overbelastning .

Vi har lært, hvad der er overbelastning og overordnet. Nu går vi til sagen.

Kan vi overbelaste en statisk metode?

Svaret er Ja . Vi kan overbelaste statiske metoder. Men husk, at metodesignaturen skal være anderledes. Overvej for eksempel 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); } } 

Produktion:

 Static method called. An overloaded static method called. 

Her opstår et spørgsmål kan vi overbelaste metoderne, hvis de kun er forskellige ved statiske søgeord.

Svaret er Ingen. Vi kan ikke tilsidesætte to metoder, hvis de kun adskiller sig ved statiske søgeord. Overvej for eksempel 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 ovenstående program, viser det følgende fejl.

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

Kan vi tilsidesætte en statisk metode?

Ingen, vi kan ikke tilsidesætte statiske metoder, fordi metodetilsidesættelse er baseret på dynamisk binding ved kørsel, og de statiske metoder er bundet ved hjælp af statisk binding på kompileringstidspunktet. Så vi kan ikke tilsidesætte statiske metoder.

Kald af metode afhænger af typen af ​​objekt, der kalder den statiske metode. Det betyder:

  • Hvis vi kalder en statisk metode ved at bruge det overordnede klasseobjekt, vil den oprindelige statiske metode blive kaldt fra den overordnede klasse.
  • Hvis vi kalder en statisk metode ved at bruge børneklasseobjektet, kaldes den statiske metode for børneklassen.

I det følgende eksempel har ParentClass en statisk metode ved navn display() og ChildClass har også den samme metodesignatur. Metoden i den afledte klasse (ChildClass) skjuler metoden i basisklassen. lad os 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'); } } 

Produktion:

 display() method of the parent class.