La ejecución de un programa Java requiere dos pasos: compilación y ejecución (interpretación), y Java es un lenguaje de programación orientado a objetos. Cuando la subclase y la clase principal tienen el mismo método, la subclase anula el método de la clase principal. Cuando el programa llama al método en tiempo de ejecución, si se llama al método de la clase principal o se anula la subclase, este debería ser un problema que encontramos cuando comenzamos a aprender Java. Aquí primero determinamos qué método implementar o operación variable para determinar esta llamada se llama enlace.
Hay dos métodos de unión en Java, uno es la unión estática, también conocida como unión temprana. Otro tipo es la unión dinámica, también conocida como enlace tardío.
El concepto de vinculación del programa:
La unión se refiere a la asociación de una llamada de método con la clase (el cuerpo del método) donde se encuentra el método. Para Java, la unión se divide en unión estática y unión dinámica; o se llama vinculación temprana y vinculación tardía.
Unión estática (unión del compilador de unión temprana):
El método se ha limitado antes de ejecutar el programa y es implementado por el compilador u otro programa de conexión. Por ejemplo: C. Para Java, se puede entender como vinculante durante el período de compilación del programa; Específicamente, los únicos métodos en Java son finales, estáticos, privados y constructores que están previamente vinculantes
Enlace dinámico (enlace tardío durante el tiempo de ejecución):
Vínculos posteriores: se une de acuerdo con el tipo de objeto específico en tiempo de ejecución.
Si un lenguaje implementa la unión tardía, es necesario proporcionar algunos mecanismos para determinar el tipo de objeto durante la operación y llamar a los métodos apropiados por separado. En otras palabras, el compilador todavía no conoce el tipo de objeto en este momento, pero el mecanismo de llamadas del método puede investigarlo por sí mismo y encontrar el cuerpo del método correcto. Diferentes idiomas tienen diferentes formas de implementar la vinculación tardía. Se puede pensar que todos necesitan insertar ciertos tipos especiales de información en el objeto.
Proceso de enlace dinámico:
Resumen sobre la vinculación:
Después de comprender el concepto de los tres, encontramos que Java pertenece a la unión tardía. En Java, casi todos los métodos son de unión tardía, y los métodos de unión dinámicamente son subclases o clases base en tiempo de ejecución. Pero también hay características especiales. Dado que los métodos estáticos y los métodos finales no se pueden heredar, sus valores se pueden determinar en el momento de la compilación. Pertenecen a la encuadernación temprana. Para ser anotados particularmente, los métodos y las variables de miembros declaradas por privadas no pueden ser heredadas por subclases, y todos los métodos privados se especifican implícitamente como finales (de esto sabemos que el método declarado como tipo final es evitar que el método se sobrescriba, y cerrar efectivamente la unión dinámica en Java). La vinculación posterior en Java es implementada por el JVM. No necesitamos declararlo explícitamente, pero C ++ es diferente. Debemos declarar explícitamente que un método tiene una vinculación posterior. La transformación hacia arriba o el polimorfismo en Java se logra a través de la unión dinámica, por lo que comprender la unión dinámica significa transformación ascendente y polimorfismo.
Para los métodos en Java, a excepción de los constructores finales, estáticos, privados y que son de unión temprana, todos los demás métodos son vinculantes dinámicos. La unión dinámica típica ocurre bajo la declaración de conversión de la clase principal y la clase infantil:
Por ejemplo: Parent P = New Children ();
El proceso específico es el siguiente:
1. El compilador verifica el tipo de declaración y el nombre del método del objeto. Supongamos que llamamos al método XF (args) y X se ha declarado como un objeto de la clase C, entonces el compilador enumerará todos los métodos nombrados F en la clase C y los métodos heredados de la superclase de la clase C.
2. A continuación, el compilador verifica los tipos de parámetros proporcionados en la llamada de método. Si un tipo de parámetro entre todos los métodos con el nombre F coincide con el tipo de parámetro proporcionado por la llamada más, entonces se llama a este método. Este proceso se denomina "análisis de sobrecarga"
3. Cuando el programa se ejecuta y usa la vinculación dinámica a los métodos de llamadas, la máquina virtual debe llamar a una versión de método que coincida con el tipo real del objeto apuntado por x. Suponiendo que el tipo real es D (una subclase de C), si la clase D define f (cadena), entonces se llama el método, de lo contrario el método f (cadena) se buscará en la superclase de D, y así sucesivamente.
Pensamientos de la pregunta:
Cómo proporcionar a un usuario de un método un método para completar una tarea. Si el usuario tiene requisitos especiales, ¿necesita personalizar su propio método?
Conocimiento involucrado:
Clase infantil, interfaz, transformación ascendente, vinculación dinámica
Código específico:
paquete com.chengxuyuanzhilu; pública interfaz myInterfaces {void doting ();} paquete com.chengxuyuanzhilu; public class Drink implementa misInterfaces {@Override public void doting () {System.out.println ("Estoy bebiendo agua"); }} paquete com.chengxuyuanzhilu; public class Eat implementa myInterfaces {@Override public void doting () {System.out.println ("Estoy comiendo"); }} paquete com.chengxuyuanzhilu; public class Run implementa myInterfaces {@Override public void doting () {System.out.println ("Estoy ejecutando"); }} paquete com.chengxuyuanzhilu; public class testdynamicbind {public static void main (string [] args) {myInterfaces my = null; my = new Eat (); atar (my); my = nueva bebida (); atar (my); my = new run (); atar (my); } bind static void (myInterfaces my) {my.doting (); }}Lo anterior se trata de este artículo, espero que sea útil para el aprendizaje de todos.