logo

Putem suprascrie metoda statică în Java?

În Java, depășind și supraîncărcare sunt cele mai importante două caracteristici ale programare orientată pe obiecte . Caracteristica este utilizată atunci când programatorul dorește să realizeze polimorfism . Intrebarea, putem suprascrie metoda statică în Java sau puteți supraîncărca metoda statică în Java sunt cele mai importante două întrebări puse în Interviu Java . În această secțiune, vom înțelege supraîncărcarea și suprascrierea pe scurt. Am explicat și răspunsul lui de ce nu putem suprascrie metoda statică în Java?

Metoda statică

Metoda care are un cuvânt cheie static înainte de numele metodei este cunoscută ca a metoda statica . Este cunoscut și ca a metoda la nivel de clasă . O copie a metodei statice este partajată de toate obiectele clasei.

 public static int sum() { } 

Putem invoca metode statice folosind numele clasei. De exemplu, Math.abs(a) metodă . Metoda returnează valoarea absolută a argumentului transmis. Metoda statică nu poate accesa variabile sau metode de instanță.

Anularea metodei

Este o caracteristică a programare orientată pe obiecte . Este folosit pentru a obține polimorfismul în timpul rulării. Subclasa oferă o implementare specifică a unei metode care este deja furnizată de clasa sa părinte, cunoscută ca depășirea metodei. Semnătura metodei în clasa părinte și copil trebuie să fie aceeași. În depășirea metodei , care metodă urmează să fie executată, decisă în timpul execuției. Decizia se ia în funcție de obiectul pe care l-am apelat.

Supraîncărcarea metodei

Este, de asemenea, o caracteristică a programării orientate pe obiecte. Este folosit pentru a realiza polimorfismul în timp de compilare. Ne permite să folosim același nume de metodă, dar semnături diferite. Dacă o clasă are mai multe metode cu același nume, dar o semnătură de metodă diferită, aceasta este cunoscută ca supraîncărcarea metodei .

Am învățat ce este supraîncărcarea și suprasolicitarea. Acum trecem la subiect.

Putem supraîncărca o metodă statică?

Raspunsul este da . Putem supraîncărca metode statice. Dar rețineți că semnătura metodei trebuie să fie diferită. De exemplu, luați în considerare următorul program Java.

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

Ieșire:

 Static method called. An overloaded static method called. 

Aici apare o întrebare că putem supraîncărca metodele dacă sunt diferite doar prin cuvânt cheie static.

Raspunsul este Nu. Nu putem suprascrie două metode dacă diferă doar prin cuvântul cheie static. De exemplu, luați în considerare următorul program Java.

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

Când compilam programul de mai sus, acesta arată următoarea eroare.

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

Putem anula o metodă statică?

Nu, nu putem suprascrie metodele statice, deoarece suprascrierea metodei se bazează pe legarea dinamică în timpul execuției, iar metodele statice sunt legate folosind legarea statică în timpul compilării. Deci, nu putem trece peste metodele statice.

Apelarea metodei depinde de tipul de obiect care apelează metoda statică. Inseamna:

  • Dacă apelăm o metodă statică utilizând obiectul clasei părinte, metoda statică originală va fi apelată din clasa părinte.
  • Dacă apelăm o metodă statică folosind obiectul clasei copil, va fi apelată metoda statică a clasei copil.

În exemplul următor, ParentClass are o metodă statică numită display() și ChildClass are, de asemenea, aceeași semnătură de metodă. Metoda din clasa derivată (ChildClass) ascunde metoda din clasa de bază. hai sa vedem un exemplu.

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

Ieșire:

 display() method of the parent class.