logo

Podem anul·lar el mètode estàtic a Java?

A Java, anul·lant i sobrecàrrega són les dues característiques més importants de programació orientada a objectes . La funció s'utilitza quan el programador vol aconseguir-ho polimorfisme . La pregunta, podem substituir el mètode estàtic a Java o podeu sobrecarregar el mètode estàtic a Java són les dues preguntes més importants que es fan Entrevista de Java . En aquesta secció, entendrem la sobrecàrrega i l'anul·lació en resum. També hem explicat la resposta de per què no podem anul·lar el mètode estàtic a Java?

Mètode estàtic

El mètode que té una paraula clau estàtica abans del nom del mètode es coneix com a mètode estàtic . També es coneix com a mètode a nivell de classe . Tots els objectes de la classe comparteixen una còpia del mètode estàtic.

 public static int sum() { } 

Podem invocar mètodes estàtics utilitzant el nom de classe. Per exemple, Matemàtiques.abs(a) mètode . El mètode retorna el valor absolut de l'argument passat. El mètode estàtic no pot accedir a les variables o mètodes d'instància.

Anulació del mètode

És una característica de programació orientada a objectes . S'utilitza per aconseguir polimorfisme en temps d'execució. La subclasse proporciona una implementació específica d'un mètode que ja proporciona la seva classe pare, coneguda com anul·lació del mètode. La signatura del mètode a la classe pare i a la classe infantil ha de ser la mateixa. En anul·lació del mètode , quin mètode s'ha d'executar, decidit en temps d'execució. La decisió es pren segons l'objecte que hem cridat.

Sobrecàrrega del mètode

També és una característica de la programació orientada a objectes. S'utilitza per aconseguir polimorfisme en temps de compilació. Ens permet utilitzar el mateix nom de mètode però diferents signatures. Si una classe té més d'un mètode amb el mateix nom però una signatura de mètode diferent, es coneix com a sobrecàrrega del mètode .

Hem après què és sobrecarregar i anul·lar. Ara passem al punt.

Podem sobrecarregar un mètode estàtic?

La resposta és . Podem sobrecarregar mètodes estàtics. Però recordeu que la signatura del mètode ha de ser diferent. Per exemple, considereu el següent programa 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); } } 

Sortida:

 Static method called. An overloaded static method called. 

Aquí sorgeix una pregunta que podem sobrecarregar els mètodes si només són diferents per paraula clau estàtica.

La resposta és No. No podem anul·lar dos mètodes si només es diferencien per paraula clau estàtica. Per exemple, considereu el següent programa 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); } } 

Quan compilem el programa anterior, mostra el següent error.

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

Podem anul·lar un mètode estàtic?

No, no podem anul·lar mètodes estàtics perquè la substitució de mètodes es basa en l'enllaç dinàmic en temps d'execució i els mètodes estàtics s'uneixen mitjançant l'enllaç estàtic en temps de compilació. Per tant, no podem anul·lar els mètodes estàtics.

La crida del mètode depèn del tipus d'objecte que crida el mètode estàtic. Significa:

  • Si cridem a un mètode estàtic mitjançant l'objecte de classe pare, el mètode estàtic original s'anomenarà des de la classe pare.
  • Si cridem a un mètode estàtic mitjançant l'objecte de classe fill, s'anomenarà el mètode estàtic de la classe fill.

A l'exemple següent, ParentClass té un mètode estàtic anomenat display() i ChildClass també té la mateixa signatura de mètode. El mètode de la classe derivada (ChildClass) amaga el mètode de la classe base. vegem un exemple.

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

Sortida:

 display() method of the parent class.