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, si se define el mismo método tanto en la clase de superclase como en la clase de subclase, entonces el método de la clase de subclase anula el método de la superclase. Esto se conoce como anulación de método.
Ejemplo 1: anulación del 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();
}
}
Cuando ejecutamos el programa, la salida será:
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
@override
anotación en nuestro ejemplo. En Java, las anotaciones son los metadatos que utilizamos para proporcionar información al compilador. Aquí, la @override
anotación especifica el compilador que el método después de esta anulación anula el método de la superclase.
No es obligatorio de usar
@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 anulación 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
final
ystatic
. - Siempre debemos anular los métodos abstractos de la superclase (se discutirá en tutoriales posteriores).
súper palabra clave en la anulación de Java
Una pregunta común que surge mientras se realiza la anulación en Java es:
¿Podemos acceder al método de la superclase después de anular?
Bueno, la respuesta es sí . Para acceder al método de la superclase desde la subclase, utilizamos la
super
palabra clave.Ejemplo 2: uso de super 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();
}
}
Cuando ejecutamos el programa, la salida será:
Soy un animal Soy un perro.
En el ejemplo anterior, la subclase Dog 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 ; El método dentro de la superclase no se llama.
Dentro
displayInfo()
de la subclase de perro , solíamos super.displayInfo()
llamar displayInfo()
a la superclase.
Es importante tener en cuenta que los constructores en Java no se heredan. Por lo tanto, no existe la anulación del constructor 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 Java super keyword .Especificadores de acceso en la anulación de métodos
El mismo método declarado en la superclase y sus subclases puede tener diferentes especificadores de acceso. Sin embargo, hay 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 en la superclase protected
. Entonces, el mismo método myClass()
en la subclase puede ser public
o 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();
}
}
Cuando ejecutamos el programa, la salida será:
Soy un perro.
En el ejemplo anterior, la subclase Dog 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, el
displayInfo()
se declara protected
en la superclase Animal . El mismo método tiene el public
especificador de acceso en la subclase Dog . Esto es posible porque public
proporciona un mayor acceso que el protected
.Métodos abstractos de anulación
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 clases abstractas y sobreescritura de métodos abstractos en tutoriales posteriores.
0 Comentarios
Dejanos tu comentario para seguir mejorando!