logo

Kan vi åsidosätta statisk metod i Java?

I Java, åsidosättande och överbelastning är de två viktigaste egenskaperna hos objektorienterad programmering . Funktionen används när programmeraren vill uppnå polymorfism . Frågan, kan vi åsidosätta statisk metod i Java eller kan du överbelasta statisk metod i Java är de två viktigaste frågorna som ställs i Java intervju . I det här avsnittet kommer vi kortfattat att förstå överbelastning och åsidosättande. Vi har också förklarat svaret på varför kan vi inte åsidosätta den statiska metoden i Java?

Statisk metod

Metoden som har ett statiskt nyckelord före metodnamnet kallas a statisk metod . Det är också känt som en metod på klassnivå . En kopia av den statiska metoden delas av alla objekt i klassen.

 public static int sum() { } 

Vi kan anropa statiska metoder genom att använda klassnamnet. Till exempel, Math.abs(a) metod . Metoden returnerar det absoluta värdet av det godkända argumentet. Den statiska metoden kan inte komma åt instansvariabler eller metoder.

Metod Åsidosättande

Det är en egenskap hos objektorienterad programmering . Det används för att uppnå körtidspolymorfism. Underklassen tillhandahåller en specifik implementering av en metod som redan tillhandahålls av dess överordnade klass, känd som metod åsidosättande. Signaturen för metoden i föräldra- och barnklassen måste vara densamma. I metod åsidosättande , vilken metod som ska exekveras, bestäms vid körning. Beslutet fattas enligt det objekt som vi ringde.

Metod Överbelastning

Det är också ett inslag i objektorienterad programmering. Det används för att uppnå kompileringstidspolymorfism. Det tillåter oss att använda samma metodnamn men olika signaturer. Om en klass har mer än en metod med samma namn men en annan metodsignatur kallas den metodöverbelastning .

Vi har lärt oss vad som är överbelastning och överstyrande. Nu går vi till saken.

Kan vi överbelasta en statisk metod?

Svaret är Ja . Vi kan överbelasta statiska metoder. Men kom ihåg att metodsignaturen måste vara annorlunda. Tänk till exempel på följande 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. 

Här uppstår en fråga som kan vi överbelasta metoderna om de bara är olika genom statiskt nyckelord.

Svaret är Nej. Vi kan inte åsidosätta två metoder om de endast skiljer sig åt genom statiskt nyckelord. Tänk till exempel på följande 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 kompilerar programmet ovan visar det följande fel.

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

Kan vi åsidosätta en statisk metod?

Nej, vi kan inte åsidosätta statiska metoder eftersom metodöverstyrning baseras på dynamisk bindning vid körning och de statiska metoderna är bundna med statisk bindning vid kompilering. Så vi kan inte åsidosätta statiska metoder.

Anropet av metoden beror på typen av objekt som anropar den statiska metoden. Det betyder:

  • Om vi ​​anropar en statisk metod genom att använda det överordnade klassobjektet, kommer den ursprungliga statiska metoden att anropas från den överordnade klassen.
  • Om vi ​​anropar en statisk metod genom att använda barnklassobjektet kommer den statiska metoden för barnklassen att anropas.

I följande exempel har ParentClass en statisk metod som heter display() och ChildClass har också samma metodsignatur. Metoden i den härledda klassen (ChildClass) döljer metoden i basklassen. låt oss se ett exempel.

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.