Diferencia Entre Virtual Y Abstracto

Diferencia Entre Virtual Y Abstracto
Diferencia Entre Virtual Y Abstracto

Vídeo: Diferencia Entre Virtual Y Abstracto

Vídeo: Diferencia Entre Virtual Y Abstracto
Vídeo: Diferencia entre Clases Abstractas e Interfaces - Antes y Después de C# 8 2024, Mayo
Anonim

Virtual vs abstracto

Virtual y Abstract son dos palabras clave que se utilizan en la mayoría de los lenguajes de programación orientados a objetos (OO), como Java y C #. Aunque existen ligeras diferencias en lo que significa en diferentes idiomas, tanto las palabras clave virtuales como las abstractas proporcionan un sentido de implementación parcial a las entidades a las que se adjunta.

Abstracto

Normalmente, las clases abstractas, también conocidas como clases base abstractas (ABC), no se pueden instanciar (no se puede crear una instancia de esa clase). Por lo tanto, las clases abstractas solo son significativas si el lenguaje de programación admite la herencia (capacidad de crear subclases a partir de la extensión de una clase). Las clases abstractas generalmente representan un concepto o entidad abstracta con implementación parcial o nula. Por lo tanto, las clases abstractas actúan como clases principales de las que se derivan las clases secundarias, de modo que la clase secundaria compartirá las características incompletas de la clase principal y se podrán agregar funciones para completarlas. Las clases abstractas pueden contener métodos abstractos. Las subclases que extienden una clase abstracta pueden implementar estos métodos abstractos (heredados). Si la clase secundaria implementa todos estos métodos abstractos, es una clase concreta. Pero si no es así,la clase secundaria también se convierte en una clase abstracta. Lo que todo esto significa es que, cuando el programador nomina una clase como Resumen, está diciendo que la clase estará incompleta y tendrá elementos que deben completar las subclases heredadas. Esta es una buena forma de crear un contrato entre dos programadores, lo que simplifica las tareas en el desarrollo de software. El programador, que escribe código para heredar, debe seguir exactamente las definiciones del método (pero, por supuesto, puede tener su propia implementación). En Java y C #, las clases y métodos abstractos se declaran mediante la palabra clave Abstract. Esta es una buena forma de crear un contrato entre dos programadores, lo que simplifica las tareas en el desarrollo de software. El programador, que escribe código para heredar, debe seguir exactamente las definiciones del método (pero, por supuesto, puede tener su propia implementación). En Java y C #, las clases y métodos abstractos se declaran mediante la palabra clave Abstract. Esta es una buena forma de crear un contrato entre dos programadores, lo que simplifica las tareas en el desarrollo de software. El programador, que escribe código para heredar, debe seguir exactamente las definiciones del método (pero, por supuesto, puede tener su propia implementación). En Java y C #, las clases y métodos abstractos se declaran mediante la palabra clave Abstract.

Virtual

Los métodos / funciones virtuales brindan la capacidad de anular opcionalmente su comportamiento mediante una clase heredada (usando una función con la misma firma). El concepto de función virtual es importante en el siguiente escenario. Supongamos que una clase es derivada por una clase secundaria, entonces, siempre que se use un objeto de la clase derivada, puede referirse a un objeto de la clase base o la clase derivada. Pero, el comportamiento de la llamada al método puede ser ambiguo si se anulan los métodos de la clase base. Entonces, para resolver esta ambigüedad, se utiliza la palabra clave virtual. Si el método está marcado como Virtual, entonces se llama a la función de la clase derivada (si existe) o de lo contrario se llama a la función de la clase base. Por ejemplo, en C ++, la palabra clave virtual se usa exactamente para este propósito. En C #, la palabra clave Virtual se usa de manera similar, pero además,la palabra clave override debe usarse para modificar todos los métodos reemplazados. Pero en Java, no existe una palabra clave virtual explícita. Todos los métodos no estáticos se consideran virtuales. Las funciones virtuales sin cuerpo se denominan funciones virtuales puras. En Java y C #, los métodos abstractos son de hecho Pure Virtual.

Diferencia entre virtual y abstracto

Aunque Abstract y Virtual son dos palabras clave / conceptos que brindan un significado de implementación incompleta a sus entidades asociadas, tienen sus diferencias. Los métodos abstractos (que deben definirse dentro de las clases abstractas) no tienen ninguna implementación, mientras que los métodos virtuales pueden tener una implementación. Si los métodos abstractos son extendidos por una clase concreta, todos los métodos abstractos heredados deben implementarse, mientras que los métodos virtuales heredados pueden o no ser anulados.

Recomendado: