Introducción a la anulación en OOP

Al implementar el concepto de herencia en oops, todas las funciones de la clase padre son utilizadas por todas sus clases derivadas. Pero en caso de que una clase derivada quiera la implementación específica de la función que se ha declarado en la clase principal pero que usa el mismo nombre, la misma firma y el mismo tipo de retorno, se está utilizando la función de anulación. La anulación permite que la clase secundaria redefina la función que ya se ha definido en su clase principal o superclase. De esta manera, se puede usar tanto la definición especificando el objeto de la clase mientras se llama al método. Por ejemplo, si hay una función de suma tanto en la clase principal como en la secundaria, y al llamar a la función usamos el objeto de la clase secundaria, se llamará al método presente en la clase secundaria y, en su lugar, si usa el objeto de la clase primaria, el método presente en la clase padre se llamará. Se dice que este método en la clase secundaria anula el método presente en sus superclases.

Necesidad de anulación de métodos

Los siguientes son los métodos de anulación:

  • La anulación del método de polimorfismo en tiempo de ejecución ayuda a lograr el polimorfismo en tiempo de ejecución en lenguajes de programación orientados a objetos como c ++, java, c #, etc.
  • Polimorfismo significa tener muchas formas, es decir, una firma y múltiples definiciones. en lenguajes orientados a objetos cuando tanto la clase derivada como la primaria tienen el mismo nombre y firma de una función, entonces en un compilador único resuelve la definición si necesita llamar. El polimorfismo de tiempo de ejecución significa que la vinculación de una definición de método a un método llamado se produce en tiempo de ejecución de un programa. Permite implementar el aspecto de "definición múltiple de una firma" del polimorfismo. Esta característica utiliza un despacho de método dinámico que tiene un poderoso concepto de diseño orientado a objetos para brindar reutilización y solidez del código. Anular un método nos permite llamar a un método a cualquiera de sus clases derivadas sin conocer el tipo de objeto de la clase derivada.
  • Al usar esta característica, se puede implementar una definición especializada de la función genérica que se ha heredado de su superclase.

¿Cómo funciona la anulación en OOP?

La siguiente explicación dice cómo funciona la anulación:

  • Las OOP nos ayudan a implementar el polimorfismo de tiempo de ejecución mientras heredamos las características de una clase en otra. Echemos un vistazo al trabajo de anulación en los OOP. Más tarde supongamos que tenemos un nombre de superclase animal que tiene dos funciones: hablar y comer. Hay dos subclases gato y perro que amplían el nombre de superclase animal.
  • Estas dos subclases usan las mismas funciones hablar y comer, pero cambian la implementación pero mantienen la firma de los métodos. Ahora, en nuestro método principal, si llama a estas funciones eligiendo la variable de referencia, solo en tiempo de ejecución se decidirá qué función necesita llamar. Por ejemplo, si el objeto contiene la diferencia de la clase secundaria que es gato o perro, entonces se llamará a la función de una clase respectiva; de lo contrario, si el objeto contiene la referencia de la clase principal, se llamará a la función de una clase animal.
  • Aquí deberíamos ver que la función que se llama no depende del tipo de variable de referencia. Esto lo decide el compilador en tiempo de ejecución, solo ayuda a implementar el polimorfismo de tiempo de ejecución. También ayuda a implementar la definición especializada del método de la definición genérica del método en la clase padre.

Código:

class Animal(
//Overridden method
public void eat()
(
System.out.println("Animal is eating");
)
public void speak()
(
System.out.println("Animal is speaking");
)
)
class Cat extends Animal(
//Overriding method
public void eat()
(
System.out.println("Cat is eating");
)
public void speak()
(
System.out.println("Cat is meowing");
)
)
class Dog extends Animal(
//Overriding method
public void eat()
(
System.out.println("Dog is Barking");
)
public void speak()
(
System.out.println("Dog is speaking");
)
)
public class Test(
public static void main(String() args)(
Animal an=new Dog();
Animal an1 = new Cat();
Animal an2 = new Animal();
an.speak();
an.eat();
an1.speak();
an1.eat();
an2.eat();
)
)

Salida:

Nota: Una variable de referencia de tipo secundario no se puede usar para contener una referencia al tipo primario.

Reglas para anular un método

Las siguientes son las reglas de anulación:

Regla 1

Una lista de los parámetros declarados en la función de la clase principal debe coincidir con la lista de los parámetros mencionados en la definición del método de anulación en la clase secundaria.

Por ejemplo:

El método en la clase padre

public int test1(int a);

Un método en clase secundaria: prueba de cadena pública test1 (); // no se admitirá la anulación del método aquí ya que el tipo de retorno y los argumentos son diferentes pero no se producirá ningún error en tiempo de compilación. Este método se considerará como un nuevo método de una clase secundaria.

Regla # 2

El tipo de retorno del método presente en la clase secundaria debe ser el mismo o un subtipo del tipo de retorno del método que se anula.

Por ejemplo:

El método en una clase padre

public Object test1(int a);

El método en la clase secundaria.

public String test1();

Incorrecto

El método en la clase padre

public String test1(int a);

El método en la clase secundaria.

public Object test1();

Regla # 3

El especificador de acceso presente en el método de la clase principal debe ser igualmente restrictivo o más restrictivo que el método que lo anula en la clase secundaria.

Incorrecto

El método en la clase padre

public int test1(int a);

Método en la clase infantil

private int test1() ; // more restrictive than public one

Regla n. ° 4

Solo se puede anular el método de instancia con especificador de acceso como público protegido o predeterminado. Esto se debe a que solo su método de instancia puede ser heredado por su subclase y, por lo tanto, se puede anular. En caso de que el método de instancia especificado en la clase padre sea un método público de ejemplo más restrictivo, no se heredará en su subclase y si alguien está definiendo el mismo método en una subclase, ese escenario no se toma como un método que se anula, ya que los métodos públicos no pueden heredarse. ser heredado esto no puede ser anulado.

Por ejemplo:

El método en la clase padre

public int test1(int a); //can be inherited and overridden

El método en la clase secundaria.

private int test1();

Incorrecto

El método en la clase padre

private int test1(int a); //can not be inherited and overridden

El método en la clase secundaria.

private int test1();//not overriding method of the parent class

Se considera como un nuevo método privado de la clase secundaria.

Regla # 5

La palabra clave super se puede utilizar para llamar a la función de la clase padre que ha sido anulada por su subclase.

class Animal(
//Overridden method
public void eat()
(
System.out.println("Animal is eating");
)
public void speak()
(
System.out.println("Animal is speaking");
)
)
class Dog extends Animal(
//Overriding method
public void eat()
(
System.out.println("Dog is Barking");
)
public void speak()
(
super.speak(); // Here super keyword is used to call the speak function of the super class.ieAnimal
)
)
public class Test(
public static void main(String() args)(
Animal an=new Dog();
Animal an2 = new Animal();
an.speak();
an.eat();
an2.eat();
)
)

Salida:

Regla # 6

El constructor de una clase no puede ser anulado por sus subclases, ya que un constructor de dos clases no puede ser el mismo.

Regla # 7

Manejo de excepciones en anulación.

  • El método Incase en la clase padre no arroja ninguna excepción, entonces el método de anulación presente en la subclase puede lanzar una única excepción no verificada. En caso de que el método de anulación muestre una excepción marcada, el compilador mostrará un error.
  • Si el método en la clase principal que se está anulando arroja un método de anulación en tándem de excepción presente en la subclase debe a través de una excepción del mismo nivel o su subtipo en la jerarquía de excepciones o ninguna excepción.

Regla # 8

La anulación de métodos en la herencia multinivel también es posible.

Código:

class Creature (
//Overriding method
public void eat()
(
System.out.println("Creature is eating");
)
public void speak()
(
System.out.println("Creature is speaking");
)
)
class Animal extends Creature(
//Overridden method
public void eat()
(
System.out.println("Animal is eating");
)
public void speak()
(
System.out.println("Animal is speaking");
)
)
class Dog extends Animal(
//Overriding method
public void eat()
(
System.out.println("Dog is Barking");
)
public void speak()
(
System.out.println("Dog is speaking");
)
)
public class Test(public static void main(String() args)(
Creature an=new Dog();
Animal an1 = new Animal();
Animal an2 = new Dog();
an.speak();
an.eat();
an1.speak();
an1.eat();
an2.eat();
)
)

Salida:

Regla # 9

Anulación de reglas de método en Java

  • Un método sincronizado puede ser anulado fácilmente por un método no sincronizado y viceversa.
  • El método abstracto presente en las clases o interfaces abstractas se debe sobrescribir para proporcionar una implementación específica a los métodos declarados; de lo contrario, se mostrará un error en tiempo de compilación.
  • La definición de un método estático con el mismo nombre que un método estático presente en la clase padre se conoce como ocultación de métodos, no anulación de métodos, ya que no implementa el polimorfismo de tiempo de ejecución.
  • Los métodos finales no pueden ser anulados.

Regla # 10

Método de anulación en C ++

La anulación del método en c plus se logra declarando un método como virtual. Se utiliza una palabra clave virtual para lograr el polimorfismo de tiempo de ejecución en c ++. Mientras que en Java todas las funciones se toman por defecto como virtuales.

Regla # 11

La anulación del método es diferente de la sobrecarga del método, ya que es un proceso de polimorfismo en tiempo de ejecución, mientras que la sobrecarga y el método son un ejemplo de polimorfismo en tiempo de compilación. En la anulación del método, es obligatorio mantener la firma del método igual. cuando hacemos algún cambio en el tipo de retorno del método o en la lista de parámetros, el compilador lo trata como una sobrecarga del método.

Método de anulación Método de sobrecarga
class A(
public void test()(
System.out.println("In class A");
)
)
class B extends A(
public void test()(
System.out.println("In class A");
))public class Test(
public static void main(String() args)(
A a=new B();
a.test();
A b =new A();
b.test();
))
class A(
public void test()(
System.out.println("Method without arguments");
)
public void test(int x)(
System.out.println("Method with arguments");
System.out.println(x);
))public class Test(
public static void main(String() args)(
A a=new A();
a.test();
a.test(2);
)
)

Salida:

¿Cuándo utilizar la anulación de métodos?

Los siguientes son los métodos para usar la anulación:

  • OOPs proporciona una característica maravillosa de herencia para formar una gran jerarquía entre la superclase y la subclase, desde menor especialización hasta mayor especialización.
  • ¿Podemos usar la superclase para proporcionar un marco que se pueda heredar en todas sus subclases y en las subclases podemos definir el funcionamiento diferente de esos métodos? Esto se logra anulando la función donde se puede proporcionar un funcionamiento especializado a las subclases init de métodos heredados.
  • También ayuda a proporcionar un marco para múltiples clases al proporcionar una colección de variables y el método que debe implementarse en todas sus subclases.

Conclusión

OOP, los conceptos hacen que el código sea robusto y fácil de reutilizar cuando se usan de manera efectiva. La función de anulación mejora el uso de la herencia para proporcionar la implementación específica del método genérico de la clase padre en sus subclases. Esto utiliza el concepto de polimorfismo de tiempo de ejecución para activar la definición correcta del método. El despacho dinámico del método se realiza solo en tiempo de ejecución, lo que verifica la referencia de la clase que el objeto contiene para llamar al método. Esta característica se guía a través de varias reglas y no se aplica a métodos estáticos. Podemos implementar la anulación de métodos en cualquier lenguaje orientado a objetos y hacer que nuestro programa sea más rápido y robusto.

Artículos recomendados

Esta es una guía para anular en POO. Aquí discutimos cómo funciona la anulación en OOP, cuándo usarla y 11 reglas con códigos y resultados. También puede consultar nuestros otros artículos relacionados para obtener más información.

  1. Anulación en PHP
  2. Anulación en JavaScript
  3. ¿Qué es la POO?
  4. Método de anulación en C #
  5. Ejemplos de anulación en Java
  6. Método estático de JavaScript | Cómo trabajar con ejemplos