Muchos estudiantes son estúpidos y no pueden notar la diferencia entre sobrecarga y anulación. Se recomienda no memorizar el conocimiento conceptual por memoria, sino comprenderlo y memorizarlo.
Déjame primero dar mi definición:
Sobrecarga: en la misma clase o en la relación de herencia, un grupo de métodos con el mismo nombre y diferentes parámetros. Esencialmente, es el nombre de diferentes métodos.
Anulación: entre dos clases que tienen relaciones de herencia, los métodos que existen en la clase principal se redefinen en la subclase. La esencia es dar diferentes implementaciones para el mismo método.
Primero veamos el ejemplo de sobrecarga:
Public Class OverloadParent {public String getPerson (name de cadena) {return "Persona" + name; } public String getperson (int a age) {return "personb"; } public String getperson (name de cadena, int age) {return "Personc"; } public void getperson (nombre de cadena) {System.out.println ("¿Soy el método sobrecargado?"); }} public class OverloadChildextends OverloadParent {public void getperson (doble dinero) {System.out.println ("soy un método sobrecargado"); }}Presta atención a la observación:
(1) Hay 4 métodos con el mismo nombre en OverloadParent
(2) Los tipos de parámetros y los números de los tres primeros métodos son inconsistentes, y el valor de retorno es el mismo, lo que constituye una sobrecarga
(3) El método 4 y el método 1 solo los valores de retorno son diferentes, y no constituyen sobrecarga, y el compilador no pasa.
PS: El valor de retorno es el resultado de la ejecución del método. Cuando llamamos al método, no especificaremos "Quiero llamar a un método con el valor de retorno del tipo XXX", no se convertirá en una característica de sobrecarga del método.
(4) sobrecarga hereda la demostración, y tiene todos los métodos propiedad de la demostración. Se sintió que el método existente no podía satisfacer las necesidades, por lo que simplemente sobrecargó una.
Banderas sobrecargadas: el nombre del método es el mismo, los parámetros son diferentes (número o tipo), y no tienen nada que ver con el valor de retorno.
Echemos un vistazo a un ejemplo de sobrescribe:
public class overRideParent {public void fly () {System.out.println ("ican Fly!"); }} Public Class overidEchild extiende sobreverParent {@Override public void fly () {System.out.println ("Ican't Fly, pero puedo ejecutar!"); } public static vid main (string [] args) {wapwriteparent child = new OverwriteChild (); child.fly (); }}¿Qué se producirá al ejecutar el método principal de Inveridechild?
La respuesta es: ¡No puedo, pero puedo correr!
Vemos:
(1) anveridechild y overrideParent tienen un método de mosca
(2) El valor de retorno y el modificador de la mosca son los mismos, solo el cuerpo del método es diferente
(3) Hay una anotación de @OverWrite antes del método de mosca de la subclase. JDK1.5 aparece y solo se usa para la herencia de clase. 1.6 se puede utilizar para la implementación de la interfaz. Esta anotación ayuda a verificar el compilador, y está bien no agregarla.
Banderas anuladas: el niño hereda la clase principal y tiene diferentes implementaciones para el mismo método.
Escenarios de aplicación
Sobrecarga: cuando las funciones del método son similares, pero se deben pasar diferentes parámetros.
Anulación: cuando una subclase tiene su propio comportamiento único, hereda de la clase principal y no puede satisfacer sus propias necesidades.
PD: La sobrecarga y la sobrescritura son manifestaciones del polimorfismo. El primero es el polimorfismo del compilador, mientras que el segundo es el polimorfismo de tiempo de ejecución.
Gracias por leer, espero que pueda ayudarte. ¡Gracias por su apoyo para este sitio!