Cuando JVM invoca un método no estático, selecciona el método a invocar en función del tipo real del objeto (que solo se conoce en tiempo de ejecución) mientras que
para métodos estáticos, el método para invocar se selecciona en función del tipo de referencia declarado (y, por lo tanto, se conoce en tiempo de compilación). Entonces, la unión estática en
Java ocurre durante el tiempo de compilación (basado en el tipo de clase declarado) mientras que el enlace dinámico ocurre durante el tiempo de ejecución (según el objeto real en el que
- ¿Se les pide a los ingenieros mecánicos que diseñen un producto en una entrevista?
- Trabajos y carreras de ingeniería: ¿Qué tan difícil es obtener una entrevista en Apple con solo experiencia en C ++?
- ¿Por qué no es aconsejable copiar una respuesta de una pregunta de entrevista desde una plataforma pública?
- ¿Cuál debería ser su respuesta en una entrevista, cuando se le pregunta: "¿Por qué tiene tan bajas calificaciones"?
- ¿Cuáles son algunas experiencias / recuerdos divertidos que has tenido durante las entrevistas de trabajo?
se invoca el método).
Reemplazar no es más que redefinir un método en la clase secundaria para la cual la clase principal ya ha proporcionado una implementación. Gracias a dinámico
vinculante, en tiempo de ejecución, JVM verificará el objeto e invocará el método correcto (es decir, el método de la clase secundaria) incluso si la referencia es de tipo primario
Digamos que tiene una clase llamada MyJavaBean que extiende java.lang.Object. Ahora, la clase Object ya proporciona una implementación del método igual
pero digamos que elegiste anularlo en MyJavaBean
El siguiente código, en ambos casos, invocará la definición del objeto es la clase MyJavaBean en lugar de la definición en la clase Object
Objeto o1 = nuevo MyJavaBean ();
o1.equals (nuevo MyJavaBean ());
MyJavaBean o2 = new MyJavaBean ();
o2.equals (nuevo MyJavaBean ())
Tenga en cuenta que el método reemplazado no necesita tener exactamente el mismo tipo de retorno, pero sí, existen algunas restricciones. Especificación del lenguaje Java
dice,
Si una declaración de método d1 con tipo de retorno R1 anula u oculta la declaración de otro método d2 con tipo de retorno R2, entonces d1 debe ser return-
sustituible por tipo para d2. Si R1 no es un subtipo de R2, se produce una advertencia no comprobada en tiempo de compilación
los métodos estáticos están vinculados en tiempo de compilación y, por lo tanto, no pueden anularse.
La sobrecarga es tener dos métodos con un nombre idéntico pero una firma diferente en la misma clase. Tenga en cuenta que tanto en C ++ como en Java, los métodos no pueden ser
sobrecargado según el tipo de retorno. También tenga en cuenta que la firma exacta del método está vinculada en tiempo de compilación y, por lo tanto, tiene en cuenta la declaración declarada
tipo y no el tipo real. ¿Cuál de los métodos sobrecargados de la clase se elegirá para una invocación de método en particular se determinará en
Tiempo de compilación mediante el procedimiento de resolución de sobrecarga descrito
Para más información sobre esto:
¿Podemos sobrecargar o anular los métodos estáticos en Java? – GeeksforGeeks