Por Chaitanya Singh | Filed Under: Concepto de OOPs
En este tutorial discutiremos la diferencia entre sobrecargar y anular en Java. Si eres nuevo en estos términos, consulta los siguientes artículos:
- Método de sobrecarga en java
- Método de anulación en java
- La sobrecarga ocurre en tiempo de compilación mientras que la anulación ocurre en tiempo de ejecución: La vinculación de la llamada al método sobrecargado a su definición ha ocurrido en tiempo de compilación, sin embargo la vinculación de la llamada al método sobrecargado a su definición ocurre en tiempo de ejecución.
- Los métodos estáticos pueden estar sobrecargados, lo que significa que una clase puede tener más de un método estático con el mismo nombre. Los métodos estáticos no pueden ser anulados, aunque se declare un mismo método estático en la clase hija no tiene nada que ver con el mismo método de la clase padre.
- La diferencia más básica es que la sobrecarga se realiza en la misma clase mientras que para la anulación se requieren clases base e hija. La anulación consiste en dar una implementación específica al método heredado de la clase padre.
- La unión estática se utiliza para los métodos sobrecargados y la unión dinámica se utiliza para los métodos overridden/overriding.
- Rendimiento: La sobrecarga da un mejor rendimiento en comparación con la anulación. La razón es que el enlace de los métodos anulados se realiza en tiempo de ejecución.
- Los métodos privados y finales pueden ser sobrecargados pero no pueden ser anulados. Significa que una clase puede tener más de un método privado/final del mismo nombre pero una clase infantil no puede anular los métodos privados/finales de su clase base.
- El tipo de método de retorno no importa en caso de sobrecarga del método, puede ser el mismo o diferente. Sin embargo, en caso de sobrecarga del método, el método que lo sustituya puede tener un tipo de retorno más específico (véase esto).
- La lista de argumentos debe ser diferente cuando se hace una sobrecarga de métodos. La lista de argumentos debería ser la misma en el caso de la sobrecarga de métodos.
Ejemplo de sobrecarga
//A clase para sumar hasta 5 númerosclase Suma{ int add(int n1, int n2) { return n1+n2; } int add(int n1, int n2, int n3) { return n1+n2+n3; } int add(int n1, int n2, int n3, int n4) { return n1+n2+n3+n4; } int add(int n1, int n2, int n3, int n4, int n5) { return n1+n2+n3+n4+n5; } public static void main(String args[]) { Sum obj = new Sum(); System.out.println("Suma de dos números: "+obj.add(20, 21)); System.out.println("Suma de tres números: "+obj.add(20, 21, 22)); System.out.println("Suma de cuatro números: "+obj.add(20, 21, 22, 23)); System.out.println("Suma de cinco números: "+obj.add(20, 21, 22, 23, 24)); }}
Salida:
Suma de dos números: 41Suma de tres números: 63Suma de cuatro números: 86Suma de cinco números: 110
Aquí tenemos 4 versiones del mismo método. Estamos sobrecargando el método add() aquí.
Ejemplo de sobrecarga
paquete beginnersbook.com;class CarClass{ public int speedLimit() { return 100; }}class Ford extiende CarClass{ public int speedLimit() { return 150; } public static void main(String args[]) { CarClass obj = new Ford(); int num= obj.speedLimit(); System.out.println("Speed Limit is: "+num); }}
Salida:
El límite de velocidad es: 150
Aquí el método speedLimit() de la clase Ford está anulando el método speedLimit() de la clase CarClass.
- Interfaz clonable en Java – Clonación de objetos
- Paquetes en java y cómo usarlos
- Método abstracto en Java con ejemplos
- Encapsulado en Java con el ejemplo
- OOPs en Java: Encapsulación, Herencia, Polimorfismo, Abstracción
- El polimorfismo en Java con el ejemplo
Comentarios
- siva devarasays27 de septiembre de 2014 a las 8:05 PMGracias señor.
- Mariyappasays7 de noviembre de 2014 a las 8:11 AMIs 7º punto es correcto? Responder
- jemimasays26 de noviembre de 2014 a las 3:45 PMhi señor, no estoy seguro de estar en lo cierto estudié tanto el método de sobrecarga y anulación entonces estoy estudiando su diferencia… creo que el 7º punto es incorrecto.. dice «el tipo de retorno del método sobrecargado debe ser el mismo que los otros métodos del mismo nombre sin embargo el tipo de retorno del método anulador puede ser diferente del método anulado»… y creo que debe ser «el tipo de retorno de los métodos sobrecargados puede diferir pero el tipo de retorno de los métodos anuladores debe ser el mismo…»… si me equivoco plz ayúdame a identificar mi error .muchas graciasReply
- Kelelesays30 de noviembre de 2014 a las 8:04 AMi creo que anulado debe tener el tipo de retornoReply
- RAJsaysDicembre 17, 2014 a las 12:31 PMPara el 7º punto «El tipo de retorno de los métodos sobrecargados debe ser el mismo». ¿Es siempre necesario que los métodos estén sobrecargados? ¿Qué hay de este ejemplo? public String getData(){return «Employe from Manager»;}public int getData(String val){return 0;}Reply
- vishalsays30 de diciembre de 2014 a las 12:09 PM-¿Cuál es el uso de la palabra clave super mientras estamos superando una función puede usted por favor explicar… Responder
- Yogeshsays14 de enero de 2015 a las 8:19 AMI like ur explanation ……Responder
- pragatisays4 de marzo de 2015 a la 1:31 PMgracias a SirReply
- ArpithasaysApril 9, 2015 at 10:26 AMCan u please explain me 7th point ? Creo que está mal, ¿verdad? El tipo de retorno no importa en caso de sobrecarga y el tipo de retorno debe ser el mismo para el método de anulación. Responder
- Abiolasays 29 de octubre de 2015 a las 2:09 PM. Una buena forma de enseñar no lo puedo creer. Estoy aprendiendo java así como así. Responder
- Akshay pattarsaysJune 9, 2016 at 5:20 PMCarClass obj = new Ford();plz answer cant we write it ascarclass obj = new car ();Reply