¿Sobrecarga y reescritura de Java?

(1) La sobrecarga de métodos es un medio para que una clase maneje diferentes tipos de datos de forma unificada. Existen varias funciones con el mismo nombre al mismo tiempo, con diferente número/tipo de parámetros.

La sobrecarga es una manifestación del polimorfismo en una clase.

(2) La sobrecarga de métodos Java significa que se pueden crear múltiples métodos en una clase. Tienen el mismo nombre pero diferentes parámetros y diferentes definiciones.

Al llamar a métodos, usted decide qué método usar en función del número y tipo de parámetros que se les pasan. Esto es polimorfismo.

(3) Al sobrecargar, el nombre del método debe ser el mismo, pero el tipo y el número del parámetro son diferentes, y el tipo de valor de retorno puede ser el mismo o diferente. El tipo de valor devuelto no se puede utilizar como criterio para distinguir funciones sobrecargadas.

El siguiente es un ejemplo de sobrecarga:

packagec04.answer;//Este es el nombre del paquete

//Este es el primer método de programación de este programa, primero cree una instancia de la clase Dog en el método principal y luego use la palabra clave this en el método constructor de la clase Dog para llamar a diferentes métodos de ladrido.

Los diferentes métodos sobrecargados bark se distinguen según sus tipos de parámetros.

//Nota: El compilador prohíbe llamar al constructor en cualquier otro lugar que no sea el constructor.

packagec04.answer;

publicclassDog{ Dog() {

this.bark() } voidbark()//bark() método está sobrecargado {

System.out.println(\"nobarking!\");

this.bark(\"female\",3.4); voidbark(Stringm,double) / /Nota: Los valores de retorno de los métodos sobrecargados son los mismos, {

System.out.println(\"abarkingdog!\");

this.bark(5, \"China\"); } voidbark(inta,Stringn)// Los métodos sobrecargados no se pueden distinguir por el valor de retorno, solo se pueden distinguir por "tipo de parámetro" y "nombre de clase" {

System. out.println(\"ahowlingdog\"); } publicstaticvoidmain(String[]args) {

Dogdog=newDog();

//dog.bark();[ Página ]

//dog.bark(\"masculino\",\"amarillo\");

//dog.bark(5,\"China\"); /p>

Entonces hablemos de anular

(1) Polimorfismo entre la clase principal y la subclase, redefiniendo las funciones de la clase principal. Si un método definido en una subclase tiene el mismo nombre y parámetros que su clase principal, decimos que el método está anulando. En Java, una subclase puede heredar métodos de una clase principal sin reescribir los mismos métodos.

Pero a veces la subclase no quiere heredar el método de la clase principal sin cambios, sino que quiere realizar ciertas modificaciones, lo que requiere reescribir el método.

La anulación de métodos también se denomina sobrescritura de métodos.

(2) Si un método en la subclase tiene el mismo nombre de método, tipo de retorno y lista de parámetros que un método en la clase principal, el nuevo método sobrescribirá el método original.

Si necesita el método original en la clase principal, puede usar la palabra clave super, que se refiere a la clase principal de la clase actual.

(3) Los derechos de modificación de acceso de las funciones de subclase no pueden ser menores que los de la clase principal;

El siguiente es un ejemplo de reescritura:

Concepto : es decir, llamar al objeto El mecanismo del método.

La historia interna del enlace dinámico:

1. El compilador verifica el tipo y el nombre del método declarado por el objeto para obtener todos los métodos candidatos.

Intente comentar la prueba de la clase Base en el ejemplo anterior y luego la compilación no pasará.

2. Decisión de sobrecarga: el compilador verifica el tipo de parámetro de la llamada al método y selecciona el único de los métodos candidatos anteriores (habrá una conversión de tipo implícita durante este proceso).

Si el compilador encuentra más de uno o no encuentra ninguno, informará un error. Intente comentar la prueba (byteb) de la clase Base en el ejemplo anterior y el resultado de la ejecución es 11.

3. Si el tipo de método es priavtestaticfinal y Java usa compilación estática, el compilador sabrá exactamente qué método llamar.

4. Cuando el programa se está ejecutando y utiliza enlace dinámico para llamar a un método, la máquina virtual debe llamar a la versión del método que coincida con el tipo real del objeto.

En el ejemplo, el curso de Java de Changping Town descubrió que el tipo real al que apunta b es TestOverriding, por lo que b.test(0) llama a la prueba de la subclase.

Sin embargo, la subclase no anula la prueba (byteb), por lo que b.test((byte)0) llama a la prueba (byteb) de la clase principal.

Si comenta el (byteb) de la clase principal, el tipo implícito se convierte a int en el segundo paso y finalmente se llama a la prueba (inti) de la subclase.