Diferencia entre sobrecarga frente a anulación

Antes de profundizar en las diferencias entre sobrecarga frente a sobreescritura, ¿debemos entender cuáles son realmente y los escenarios en los que se utilizan particularmente? Los novatos en Java a menudo se confunden entre los dos, pero son totalmente diferentes entre sí y se usan en sus escenarios específicos. La sobrecarga de métodos es cuando tenemos múltiples métodos con el mismo nombre pero con firmas diferentes. Las firmas incluyen el número de parámetros del método, el tipo de datos de los parámetros. El tipo de método de devolución no está incluido en la firma. Esto se hace para proporcionar la funcionalidad de reutilizar el mismo nombre de método y aumentar la legibilidad de los programas. La anulación del método ocurre en el caso de herencia en la que la clase derivada hereda las propiedades de la clase base. Implica definir el mismo método de clase base en una clase derivada con el mismo parámetro y tipo de retorno para definir cualquier funcionalidad / implementación específica de ese método en la clase derivada.

Considere un escenario en el que un programador necesita encontrar el área de una figura geométrica. El área de cada figura varía entre sí. Por ejemplo, para encontrar el área del cuadrado solo se requiere un solo parámetro 'lado', para el rectángulo se requieren dos parámetros 'largo y ancho' mientras que para círculo 'se requiere un radio que puede ser decimal. Para resolver este propósito, se realiza la sobrecarga del método en el que el área del método tiene diferentes parámetros y tipos de datos para un área de diferentes figuras. Piense en la situación del sistema bancario, aunque los múltiples métodos y procedimientos para todos los empleados son los mismos, excepto para algunos, como las tasas de interés para ciudadanos normales y adultos mayores. En este caso, la anulación del método se utiliza con diferentes implementaciones de las tasas de interés del método tanto en la clase de ciudadanos normales como de la tercera edad que heredan las 'tasas bancarias' de la clase base.

Comparación cara a cara entre sobrecarga frente a anulación (infografía)

A continuación se muestra la comparación de los 7 principales entre sobrecarga frente a anulación :

Diferencias clave entre sobrecarga frente a anulación

Analicemos algunas de las principales diferencias clave entre la sobrecarga y la anulación:

  1. En la sobrecarga de métodos, los métodos pueden tener los mismos o diferentes especificadores / modificadores de acceso en el nombre del método, mientras que en el método de anulación de método del caso base (método anulado) debe tener un especificador de acceso restringido que el método de una clase padre. Por ejemplo, si el método de una clase base está protegido, entonces el método secundario private no está permitido.
  2. Cuando se compara en términos de rendimiento, la sobrecarga tiene un mejor rendimiento en comparación con la anulación porque la sobrecarga del método se realiza en tiempo de compilación.
  3. El tipo de retorno de un método nunca forma parte de la sobrecarga de métodos, por lo tanto, no importa si los diferentes métodos sobrecargados tienen el mismo tipo de retorno o uno diferente, mientras que en el método de reemplazo de método de ambos métodos de clase primaria y base debe ser exactamente el mismo .
  4. Cuando se habla de enlace, la sobrecarga tiene un enlace estático, mientras que la anulación tiene un enlace dinámico.
  5. La excepción lanzada por el método no importa en el método sobrecargado si un método arroja una excepción, otros métodos sobrecargados pueden / no pueden arrojar la misma o diferente excepción, pero en el caso de Anulación, el método de anulación (método en clase derivada) no puede arrojar una excepción de jerarquía superior a El método anulado (método en la clase base).
  6. Todos los especificadores como privado, final y estático no se pueden usar en la anulación de métodos, mientras que todos los especificadores de acceso están permitidos en la sobrecarga de métodos.

Tabla comparativa de sobrecarga frente a anulación

La siguiente tabla resume las comparaciones entre sobrecarga frente a sobreescritura:

S.No. Sobrecarga Primordial
1La sobrecarga de métodos se realiza para tener una definición mejorada de métodos de acuerdo con diversas situaciones.La anulación de métodos se realiza para proporcionar una implementación específica de los métodos definidos en la clase principal.
2La sobrecarga de métodos se realiza en una sola clase en la que una clase tiene diferentes definiciones de un método.La anulación del método se realiza entre dos clases que tienen una relación IS-A (Herencia) entre ellas.
3Método La sobrecarga se realiza en tiempo de compilación y, por lo tanto, se conoce como Polimorfismo en tiempo de compilación.La anulación del método se realiza en tiempo de ejecución y, por lo tanto, se conoce como polimorfismo de tiempo de ejecución.
4 4El orden de los parámetros, el tipo de datos y el recuento de parámetros deben ser diferentes para la sobrecarga de métodos.El orden de los parámetros, el tipo de datos y el recuento deben ser los mismos para la anulación de métodos.
5 5El tipo de retorno de un método puede ser el mismo o diferente en caso de sobrecarga de métodos. No importa en absoluto.El tipo de retorno de un método debe ser el mismo tanto en la clase principal como en la secundaria en caso de anulación de métodos.
6 6Los métodos estáticos se pueden sobrecargar, es decir, podemos tener diferentes métodos estáticos sobrecargados en la misma clase.Los métodos estáticos nunca pueden anularse, es decir, el método estático en una clase primaria y la clase base no tiene relación entre ellos.
7 7Los métodos privados y finales se pueden sobrecargar en una clase, es decir, una clase puede haber sobrecargado más de 1 métodos privados y finales.Los métodos privados y finales nunca se pueden anular en una clase secundaria.

Ejemplo de sobrecarga de métodos:

class FIgures(
public int area(int side)
(
return side*side;
)
public int area(int length, int breadth) //method overloading
(
return length*breadth;
)
public static void main(String() args)
(
Figures f = new Figures ();
System.out.println(“Area of Square “+ f.area(10));
System.out.println(“Area of Rectangle “+ f.area(12, 10));
)
)

Salida:

Área de la Plaza 100
Área de rectángulo 120

En el ejemplo anterior, el método 'area ()' está sobrecargado y tiene diferentes parámetros en ambos métodos sobrecargados. Como el área necesita encontrar tanto el cuadrado como el rectángulo pero con diferentes parámetros.

Ejemplo de anulación de método:

class BankRates( // parent(base) class
void rates()
(
System.out.println(“Rates for normal citizen is 3.5%”);
)
)
class SeniorCItizen extends BankRates( //child class inheriting parent class
void rates() // method overriding
(
System.out.println(“Rates for senior citizens is 4.5%”);
)
)
class Bank(
public static void main(String() args)
(
SeniorCItizen sc = new BankRates(); sc.rates();
)
)

Salida:

Las tarifas para personas mayores son del 4.5%

En el ejemplo anterior, el método 'rates ()' se anula en la clase derivada 'SeniorCitizen' porque queremos que las tasas del método también estén en la clase SeniorCitizen pero con una implementación diferente.

Conclusión

La explicación anterior muestra claramente la diferencia entre sobrecarga frente a sobreescritura y los escenarios específicos donde se utilizan estos dos. Antes de programar, uno necesita comprender estos conceptos básicos de Java, ya que forman la base de muchas cosas y ayuda a comprender fácilmente conceptos más avanzados.

Artículos recomendados

Esta ha sido una guía para la principal diferencia entre sobrecarga frente a anulación. Aquí también discutimos las diferencias clave de sobrecarga frente a anulación con infografías y tabla de comparación. También puede echar un vistazo a los siguientes artículos para obtener más información:

  1. Programación funcional vs OOP
  2. ¿Qué es anular en JavaScript?
  3. ¿Cómo funciona la sobrecarga en PHP?
  4. Descripción general de la sobrecarga en C #
  5. Anulación en Java
  6. Sobrecarga de Python
  7. Sobrecarga y anulación en C #