Anulación del método Java

En este tutorial, aprenderemos sobre la anulación de métodos en Java con la ayuda de ejemplos.

En el último tutorial, aprendimos sobre la herencia. La herencia es una propiedad OOP que nos permite derivar una nueva clase (subclase) de una clase existente (superclase). La subclase hereda los atributos y métodos de la superclase.

Ahora bien, si se define el mismo método tanto en la superclase como en la subclase, entonces el método de la clase subclase anula el método de la superclase. Esto se conoce como anulación de método.

Ejemplo 1: Anulación de método

 class Animal ( public void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( @Override public void displayInfo() ( System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) ) 

Salida :

 Yo soy un perro. 

En el programa anterior, el displayInfo()método está presente tanto en la superclase Animal como en la subclase Perro.

Cuando llamamos displayInfo()usando el objeto d1 (objeto de la subclase), se llama al método dentro de la subclase Dog. El displayInfo()método de la subclase anula el mismo método de la superclase.

Observe el uso de la @Overrideanotación en nuestro ejemplo. En Java, las anotaciones son los metadatos que usamos para proporcionar información al compilador. Aquí, la @Overrideanotación especifica al compilador que el método después de esta anotación anula el método de la superclase.

No es obligatorio su uso @Override. Sin embargo, cuando usamos esto, el método debe seguir todas las reglas de anulación. De lo contrario, el compilador generará un error.

Reglas de reemplazo de Java

  • Tanto la superclase como la subclase deben tener el mismo nombre de método, el mismo tipo de retorno y la misma lista de parámetros.
  • No podemos anular el método declarado como finaly static.
  • Siempre debemos anular los métodos abstractos de la superclase (se discutirá en tutoriales posteriores).

super palabra clave en Java Overriding

Una pregunta común que surge al realizar la anulación en Java es:

¿Podemos acceder al método de la superclase después de anular?

Bueno, la respuesta es . Para acceder al método de la superclase desde la subclase, usamos la superpalabra clave.

Ejemplo 2: uso de una súper palabra clave

 class Animal ( public void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( public void displayInfo() ( super.displayInfo(); System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) ) 

Salida :

Soy un animal Yo soy un perro.

En el ejemplo anterior, la subclase Perro anula el método displayInfo()de la superclase Animal.

Cuando llamamos al método displayInfo()usando el objeto d1 de la subclase Dog, se llama al método dentro de la subclase Dog; no se llama al método dentro de la superclase.

Dentro displayInfo()de la subclase Dog, solíamos super.displayInfo()llamar displayInfo()a la superclase.

Es importante señalar que los constructores en Java no se heredan. Por lo tanto, no existe la anulación de constructores en Java.

Sin embargo, podemos llamar al constructor de la superclase desde sus subclases. Para eso usamos super(). Para obtener más información, visite la palabra clave super Java.

Especificadores de acceso en la anulación de métodos

El mismo método declarado en la superclase y sus subclases pueden tener diferentes especificadores de acceso. Sin embargo, existe una restricción.

Solo podemos usar esos especificadores de acceso en subclases que proporcionan un acceso mayor que el especificador de acceso de la superclase. Por ejemplo,

Supongamos que myClass()se declara un método de la superclase protected. Entonces, el mismo método myClass()en la subclase puede ser publico protected, pero no private.

Ejemplo 3: Especificador de acceso en anulación

 class Animal ( protected void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( public void displayInfo() ( System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) ) 

Salida :

 Yo soy un perro. 

En el ejemplo anterior, la subclase Perro anula el método displayInfo()de la superclase Animal.

Siempre que llamamos displayInfo()usando el d1 (objeto de la subclase), se llama al método dentro de la subclase.

Tenga en cuenta que displayInfo()se declara protecteden la superclase Animal. El mismo método tiene el publicespecificador de acceso en la subclase Perro. Esto es posible porque publicproporciona un mayor acceso que el protected.

Métodos abstractos primordiales

En Java, las clases abstractas se crean para ser la superclase de otras clases. Y, si una clase contiene un método abstracto, es obligatorio anularlo.

Aprenderemos más sobre las clases abstractas y la sustitución de métodos abstractos en tutoriales posteriores.

Articulos interesantes...