java override method overriding
Este tutorial explica cómo lograr el polimorfismo en tiempo de ejecución en Java mediante la anulación de métodos y la anotación @override con ejemplos simples:
Ya hemos discutido en detalle el concepto de polimorfismo y el polimorfismo en tiempo de compilación. En este tutorial, continuaremos con el polimorfismo en tiempo de ejecución en Java.
A diferencia del polimorfismo en tiempo de compilación en el que la llamada al método se resuelve en tiempo de compilación, en el polimorfismo en tiempo de ejecución, la llamada al método se resuelve en tiempo de ejecución.
=> Consulte TODOS los tutoriales de Java aquí.
Lo que vas a aprender:
- Polimorfismo en tiempo de ejecución en Java
- @override Anotación en Java
- Sobrecarga y anulación en Java
- Conclusión
Polimorfismo en tiempo de ejecución en Java
Un polimorfismo en tiempo de ejecución que también se conoce como polimorfismo dinámico o Envío de método dinámico es un técnica en la que una llamada al método anulado se resuelve dinámicamente en tiempo de ejecución.
El polimorfismo en tiempo de ejecución en Java se logra mediante el uso de ' anulación del método ”. La invalidación de métodos es una técnica mediante la cual un método de la clase principal se redefine o se invalida en la clase secundaria.
Cuando el método se reemplaza en una clase, la técnica de envío de método dinámico resuelve la llamada al método reemplazado en tiempo de ejecución y no en tiempo de compilación.
Lograr polimorfismo en tiempo de ejecución en Java: anulación de método
La anulación de método es el enfoque que usamos para lograr el polimorfismo en tiempo de ejecución en Java. Como ya se mencionó, la sustitución de métodos es una técnica en la que la subclase agrega un método que ya está presente en su clase principal y agrega una nueva funcionalidad a este método. Entonces decimos que se anula el método de la clase base.
El nuevo método que definimos en la subclase con el mismo prototipo que el método de la clase principal pero una implementación diferente se llama ' método primordial ' . El método de la clase principal se conoce como ' Método anulado ”.
cómo iniciar un proyecto en eclipse
Una vez que se anula el método, queda la pregunta de cómo se resuelve la llamada a este método anulado.
Por lo general, llamamos al método invalidado a través de la referencia de la clase base. Crearemos una referencia de tipo base y luego asignaremos un objeto de clase hijo usando la nueva palabra clave.
Por lo tanto, depende del contenido de la variable de referencia o del objeto al que hace referencia la referencia de clase base que determina qué método se llamará. Entonces, si los objetos de referencia apuntan al objeto de la clase secundaria, se llama al método de reemplazo.
De lo contrario, si el objeto de referencia contiene un objeto de clase base, se llama al método invalidado. Un tema que debemos tener claro en el polimorfismo en tiempo de ejecución, especialmente para el envío de métodos dinámicos, es 'Upcasting', que se explica a continuación.
Upcasting
Cuando un objeto de referencia de la clase padre que discutimos anteriormente apunta o hace referencia al objeto de la subclase, lo llamamos Upcasting.
Comprendamos el upcasting con un ejemplo simple.
Considere que tenemos una clase 'BaseClass' y ampliamos esta BaseClass para crear una nueva clase DerivedClass. Esta estructura se ve como se muestra a continuación.
|_+_|Ahora, para implementar el upcasting, declararemos una variable de referencia de tipo BaseClass. A continuación, asignamos un objeto de DerivedClass a la referencia de la clase BaseClass como se hace en la siguiente declaración de código.
|_+_|Entonces aquí podemos decir que hemos actualizado el objeto DerivedClass a BaseClass. En lo que respecta al polimorfismo en tiempo de ejecución, el concepto de upcasting es muy importante.
Así, en general, el upcasting es el proceso de asignar objetos secundarios o subclase a la referencia de un padre o superclase.
|_+_|El programa Java a continuación muestra la anulación de métodos y también muestra cómo se realiza la conversión para resolver las llamadas de métodos anulados en tiempo de ejecución.
|_+_|Producción:
En el programa anterior, tenemos dos clases, es decir, child1 y child2, que se derivan de una clase 'Parent'. La clase principal tiene un método 'Imprimir' que se anula en las clases child1 y child2. Luego, en el método principal, creamos un objeto de referencia de la clase principal llamado 'padre'.
Primero, le asignamos un objeto de la clase Parent y luego llamamos al método 'Print ()'. Luego repetimos esto asignando primero el objeto child1 y luego el objeto child2 a la referencia Parent.
qa analista entrevista preguntas y respuestas pdf
La salida muestra, según el contenido de la referencia principal, y se llama al método de impresión apropiado.
Ventajas del polimorfismo dinámico / en tiempo de ejecución
- Con polimorfismo dinámico, el programador puede anular métodos.
- Permite a las clases definir un método con implementación general que sus derivados pueden luego anular y proporcionar la implementación específica.
- Con el envío de método dinámico, la llamada al método se resuelve en tiempo de ejecución, a diferencia de la sobrecarga que se decide en tiempo de compilación. Esto permite una mayor flexibilidad para los programadores.
Como el polimorfismo en tiempo de ejecución une el método apropiado a la llamada en tiempo de ejecución y también lo llamamos enlace dinámico o enlace tardío . El polimorfismo en tiempo de compilación, por otro lado, admite enlace estático o enlace temprano .
Enlace estático frente a enlace dinámico
Enlace estático | Enlace dinámico |
---|---|
La llamada al método resuelta en tiempo de compilación es un enlace estático. | La llamada al método resuelta en tiempo de ejecución es un enlace dinámico. |
La sobrecarga de métodos es un ejemplo de enlace estático. | La anulación de método es un ejemplo de enlace dinámico. |
Los tipos de clase y campo se utilizan para el enlace estático. | Los objetos se utilizan para el enlace dinámico. |
Las entidades privadas, finales y estáticas utilizan enlaces estáticos. | Los métodos virtuales utilizan un enlace dinámico. |
Función / método virtual en Java
La función o método virtual en Java es una característica que se utiliza con el polimorfismo en tiempo de ejecución. A diferencia de C ++, Java no tiene una palabra clave 'virtual' especial para indicar que un método es virtual. Un método que se define en la clase base y se reemplaza en la clase derivada es virtual.
En Java, de forma predeterminada, todos los métodos no estáticos, excepto el privado y el final, son funciones virtuales. Por lo tanto, tenga en cuenta que los métodos que discutimos anteriormente sobreescribiendo para implementar el polimorfismo en tiempo de ejecución también son métodos virtuales.
Como el método estático está vinculado a Class y no se puede llamar mediante un objeto, no se puede utilizar con polimorfismo en tiempo de ejecución y tampoco es una función virtual.
Las interfaces en Java son virtuales por defecto. Las clases que implementan interfaces proporcionan implementaciones para los métodos de interfaz. Como en el polimorfismo en tiempo de ejecución, la llamada a métodos de interfaz también se resuelve en tiempo de ejecución.
Recuerde que, dado que los métodos de una interfaz están diseñados para anularse, todos los métodos de la interfaz son funciones virtuales.
Por ejemplo, considere el siguiente código:
|_+_|En el código anterior, el método accelerate () es una función virtual, ya que es parte de la interfaz del automóvil y está diseñado para ser anulado.
@override Anotación en Java
La anotación @override es la anotación predeterminada en Java. Esta anotación se introdujo en Java 1.5. La anotación @override se usa cuando el método de subclase anula su método de superclase.
Al utilizar la anotación Java @override para indicar que el método está anulando su método de clase principal, un compilador emite una advertencia si el método anotado no se anula. Por lo tanto, hace que sea obligatorio anular el método cuando se usa la anotación @override.
En segundo lugar, al usar la anotación @override hacemos que el código sea más legible. Inmediatamente podemos darnos cuenta de que el método que se declara debe anularse.
La sintaxis general de la anotación Java @override es
|_+_|El siguiente programa Java muestra el uso de la anotación @override.
|_+_|Producción:
En el programa anterior, tenemos una BaseClass que define un método de visualización. Luego derivamos una clase DerivedClass de esta BaseClass y marcamos el método de visualización con la anotación @override. Este método se reemplaza en DerivedClass.
En el método principal, creamos una referencia de objeto BaseClass y la apuntamos al objeto DerivedClass que hace que la referencia llame al método de visualización DerivedClass.
Si no hubiéramos implementado el método display () en la clase Derived, entonces el compilador habría dado una advertencia al compilador ya que está marcado con la anotación @override.
Sobrecarga y anulación en Java
Ahora que hemos analizado tanto la sobrecarga como la anulación en Java, resumamos estos dos conceptos.
La sobrecarga está relacionada con el polimorfismo en tiempo de compilación, es decir, implementamos el polimorfismo en tiempo de compilación mediante la sobrecarga. La sobrecarga se realiza de dos formas, es decir, sobrecarga del método y sobrecarga del operador.
La sobrecarga de métodos es la técnica en la que tenemos más de un método con el mismo nombre pero diferentes listas de parámetros. La lista de parámetros se diferencia en función del número de parámetros, tipos de parámetros o secuencia de parámetros.
La sobrecarga de operadores en Java es limitada y nos permite sobrecargar solo el operador '+' que se usa para sumar dos números y concatenar dos objetos String.
La sobrecarga se resuelve en tiempo de compilación y es estática. También es llamado 'Enlace anticipado' .
La anulación de método es una función con la que implementamos polimorfismo en tiempo de ejecución. En la invalidación de métodos, un método de la clase principal se invalida en la clase secundaria. Esto significa que el prototipo del método tanto en la superclase como en la subclase sigue siendo el mismo, pero las implementaciones son diferentes.
La anulación de métodos utiliza la técnica de envío de métodos dinámicos para resolver la llamada al método y decidir si llamar a un método de superclase o subclase y esto se hace en tiempo de ejecución.
Por lo tanto, el polimorfismo en tiempo de ejecución también se denomina polimorfismo dinámico o unión tardía.
A continuación, tabularicemos las diferencias entre sobrecargar y anular en Java.
Sobrecarga vs anulación en Java
Sobrecarga | Primordial |
---|---|
La sobrecarga se utiliza en el polimorfismo en tiempo de compilación. | La anulación se implementa en el polimorfismo en tiempo de ejecución. |
Se puede realizar en la misma clase. Puede o no requerir herencia. | Anular siempre requiere herencia. |
Los métodos están sobrecargados con el mismo nombre de método y una lista de parámetros diferente. | Los métodos anulados tienen los mismos prototipos. |
El tipo de retorno no se considera en la sobrecarga de métodos. | El tipo de retorno debe ser el mismo en los métodos reemplazados y reemplazados. |
Mejora la legibilidad del programa. | La anulación permite tener una clase de implementación específica. |
Preguntas frecuentes
P # 1) ¿Podemos anular el método estático?
Responder: No. Los métodos estáticos no se pueden anular en Java. Esto se debe a que los métodos estáticos se basan en clases y la clase los llama directamente. No necesitan objetos para invocar en tiempo de ejecución. Por lo tanto, el compilador determina el envío del método estático.
P # 2) ¿Podemos anular el constructor?
Responder: No, no podemos anular un constructor. Se llama a un constructor cuando se crea el objeto. No se llama objeto. Además, uno de los requisitos de la anulación es el método anulado y el método anulado debe tener la misma firma de método, lo que no es posible en el caso de los constructores.
P # 3) ¿Por qué la invalidación de métodos se denomina polimorfismo dinámico?
Responder: En el caso de la invalidación del método, la llamada al método se resuelve dinámicamente en tiempo de ejecución. Por eso se llama polimorfismo dinámico.
P # 4) ¿Cuál es el uso del polimorfismo dinámico en Java?
Responder: El polimorfismo dinámico utiliza una técnica de envío de métodos dinámicos que admite la anulación de métodos para que la subclase pueda proporcionar una implementación específica del método anulado. De esta forma podemos implementar las características específicas que nos permiten escribir programas eficientes.
En segundo lugar, tampoco debemos preocuparnos por resolver las llamadas a métodos, ya que el envío de métodos dinámicos decide a qué método llamar.
P # 5) ¿Cuál es la diferencia entre enlace estático y dinámico?
Responder: El enlace entre una llamada a un método y su implementación se llama enlace. Cuando este enlace se resuelve en tiempo de compilación, lo llamamos enlace estático. Cuando el enlace se realiza dinámicamente en tiempo de ejecución, lo llamamos enlace dinámico.
El enlace estático utiliza el tipo de datos de la clase y los campos para resolver las llamadas a métodos. El enlace dinámico utiliza objetos para resolver llamadas a métodos. El enlace estático también se denomina polimorfismo en tiempo de compilación y el enlace dinámico también se denomina polimorfismo en tiempo de ejecución.
¿Dónde encuentro la clave de seguridad de la red?
Conclusión
En este tutorial, hemos discutido el polimorfismo en tiempo de ejecución en Java en detalle.
El polimorfismo en tiempo de ejecución se implementa mediante la invalidación de métodos. La anulación del método se realiza en la subclase en la que un método definido en la superclase se redefine o anula en su subclase. La firma del método sigue siendo la misma en la superclase y la subclase.
Al usar la anulación de métodos, podemos proporcionar una implementación específica para el mismo método en la subclase. De esta manera, podemos escribir programas más eficientes que involucren herencia. Java proporciona la anotación @override para indicar que el método debe ser reemplazado.
De forma predeterminada, todos los métodos no estáticos que no son finales son virtuales en Java. Todos los métodos virtuales se pueden anular.
=> Tenga cuidado con la serie de capacitación simple de Java aquí.
Lectura recomendada
- Anulación de métodos predefinidos en Java
- Método Java String length () con ejemplos
- ¿Qué es el polimorfismo en Java? Tutorial con ejemplos
- ¿Cómo utilizar el método toString de Java?
- Método Java String indexOf con ejemplos de código
- Tutorial del método Java String contains () con ejemplos
- Método Java String Split () - Cómo dividir una cadena en Java
- Método Java String compareTo con ejemplos de programación