logo

¿Podemos anular el método estático en Java?

En Java, primordial y sobrecargar son las dos características más importantes de programación orientada a objetos . La característica se utiliza cuando el programador quiere lograr polimorfismo . La pregunta, ¿Podemos anular el método estático en Java? o ¿Puedes sobrecargar el método estático en Java? son las dos preguntas más importantes que se hacen en entrevista java . En esta sección, entenderemos brevemente la sobrecarga y la anulación. También hemos explicado la respuesta de ¿Por qué no podemos anular el método estático en Java?

Método estático

El método que tiene una palabra clave estática antes del nombre del método se conoce como método estático . También se le conoce como método de nivel de clase . Todos los objetos de la clase comparten una copia del método estático.

 public static int sum() { } 

Podemos invocar métodos estáticos usando el nombre de la clase. Por ejemplo, Matemáticas.abs(a) método . El método devuelve el valor absoluto del argumento pasado. El método estático no puede acceder a variables o métodos de instancia.

Anulación de métodos

Es una característica de programación orientada a objetos . Se utiliza para lograr polimorfismo en tiempo de ejecución. La subclase proporciona una implementación específica de un método que ya proporciona su clase principal, conocido como anulación del método. La firma del método en la clase principal y secundaria debe ser la misma. En anulación del método , qué método se va a ejecutar, se decide en tiempo de ejecución. La decisión se toma según el objeto que llamamos.

Sobrecarga de métodos

También es una característica de la programación orientada a objetos. Se utiliza para lograr polimorfismo en tiempo de compilación. Nos permite utilizar el mismo nombre de método pero diferentes firmas. Si una clase tiene más de un método con el mismo nombre pero con una firma de método diferente, se conoce como sobrecarga de métodos .

Hemos aprendido qué es sobrecargar y anular. Ahora vamos al grano.

¿Podemos sobrecargar un método estático?

La respuesta es . Podemos sobrecargar métodos estáticos. Pero recuerda que la firma del método debe ser diferente. Por ejemplo, considere el siguiente 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); } } 

Producción:

 Static method called. An overloaded static method called. 

Aquí surge una pregunta que ¿Podemos sobrecargar los métodos si solo se diferencian por la palabra clave estática?

La respuesta es No. No podemos anular dos métodos si solo difieren por la palabra clave estática. Por ejemplo, considere el siguiente 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); } } 

Cuando compilamos el programa anterior, muestra el siguiente error.

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

¿Podemos anular un método estático?

No, No podemos anular métodos estáticos porque la anulación de métodos se basa en un enlace dinámico en tiempo de ejecución y los métodos estáticos se vinculan mediante un enlace estático en tiempo de compilación. Por tanto, no podemos anular los métodos estáticos.

La llamada del método depende del tipo de objeto que llama al método estático. Significa:

  • Si llamamos a un método estático utilizando el objeto de la clase principal, el método estático original se llamará desde la clase principal.
  • Si llamamos a un método estático utilizando el objeto de clase secundaria, se llamará al método estático de la clase secundaria.

En el siguiente ejemplo, ParentClass tiene un método estático llamado display() y ChildClass también tiene la misma firma de método. El método de la clase derivada (ChildClass) oculta el método de la clase base. veamos un ejemplo.

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

Producción:

 display() method of the parent class.