Despacho dinámico de métodos en Java
- Envío de métodos dinámicos en Java
- Importancia del envío de métodos dinámicos en Java
- Envío de método dinámico con ejemplo de código en Java
Este tutorial educa sobre el envío de métodos dinámicos en Java. Habla sobre su definición técnica e importancia y explica con ejemplos de código.
Envío de métodos dinámicos en Java
Desglosemos las palabras y pensemos en Dispatch
como una decisión a qué función (método) llamar. La palabra Dinámico indica que se determina en tiempo de ejecución.
En las palabras más simples, podemos decir qué función/método se debe ejecutar se decide en tiempo de ejecución.
Teniendo en cuenta la definición técnica, el envío de métodos dinámicos (también conocido como polimorfismo en tiempo de ejecución) es un mecanismo que se utiliza para resolver una llamada a un método anulado en tiempo de ejecución en lugar de en tiempo de compilación.
Cuando llamamos al método anulado en la clase secundaria usando una referencia, Java decide qué método se ejecutará según el tipo de objeto al que hace referencia. Entendamos la definición usando las siguientes dos capturas de pantalla del código.
Concéntrese en la siguiente captura de pantalla donde tenemos tres clases llamadas Shape
, Rectangle
, y la clase Main
. La clase Shape
es la superclase, y Rectangle
es la clase secundaria.
El método main
tiene dos objetos de tipo Shape
y Rectangle
y guarda sus referencias en las variables shape
y rectangle
.
Estas variables llaman al método display()
de la clase respectiva. Por ejemplo, si llamamos a shape.display()
, se decidirá en tiempo de compilación que se está llamando a display()
de la clase Shape
porque shape
contiene la referencia de Shape
clase.
Ahora, cambie el código como se muestra en la siguiente captura de pantalla. Aquí, el método main
contiene los dos objetos, uno para la clase Shape
y el otro para la clase Rectangle
pero ambos (la variable shape
y rectangle
) contienen la referencia de la clase Shape
.
Entonces, ¿cómo decide el programa qué método anulado debe llamarse? Aquí es donde el envío de métodos dinámicos juega su papel.
Aquí, Java determina qué método debe ejecutarse según el tipo de objeto al que se refiere.
Si el objeto es de tipo Rectangle
, entonces se llamaría al método display()
de la clase Rectangle
, y si el objeto es de tipo Shape
, entonces se llamaría al método display()
de la clase Shape
. se llamaría la clase. Y todas estas decisiones se toman en tiempo de ejecución.
Esto es lo que llamamos polimorfismo en tiempo de ejecución o despacho de método dinámico.
Importancia del envío de métodos dinámicos en Java
Los siguientes puntos aumentan la importancia de utilizar el método dinámico de envío.
- El envío del método dinámico permite que el método de soporte de Java anule lo necesario para el polimorfismo en tiempo de ejecución.
- Permite que la clase secundaria incorpore sus funciones y actualice la implementación según los requisitos del proyecto.
- Permite que la superclase defina una función/método que se compartiría con sus clases secundarias y permite que estas clases secundarias actualicen la implementación de la función.
Envío de método dinámico con ejemplo de código en Java
Código de ejemplo:
class Shape {
Shape() {}
void display() {
System.out.println("I am in the Shape class");
}
}
class Rectangle extends Shape {
Rectangle() {}
void display() {
System.out.println("I am in the Rectangle class");
}
}
class Triangle extends Shape {
Triangle() {}
void display() {
System.out.println("I am in the Triangle class");
}
}
public class Main {
public static void main(String args[]) {
Shape rectangle = new Rectangle();
Shape triangle = new Triangle();
rectangle.display();
triangle.display();
}
}
Producción :
I am in the Rectangle class
I am in the Triangle class
Aquí, las clases Rectangle
y Triangle
extienden la clase Shape
. Estas clases tienen un método display()
al que se supone que llamamos al método main
.
El método main
tiene dos objetos, uno para la clase Rectangle
y otro para la clase Triangle
, pero las variables de referencia rectangle
y triangle
se refieren a la misma clase padre llamada Shape
.
¿Cómo saber qué función sería llamada? Aquí, el método de envío dinámico entra en escena.
Recuerde, también estamos usando enlaces dinámicos y upcasting en los siguientes dos códigos de código.
Shape rectangle = new Rectangle();
Shape triangle = new Triangle();
El enlace dinámico usa el objeto (instancia de la clase, que es new Rectangle()
y new Triangle()
aquí) para resolver la llamada al método en tiempo de ejecución.
Aquí también se utiliza el upcasting porque las variables de referencia de la clase principal (rectangle
y triangle
) hacen referencia a las clases secundarias Rectangle
y Triangle
.