Diferencia entre herencia y polimorfismo

Autor: Laura McKinney
Fecha De Creación: 1 Abril 2021
Fecha De Actualización: 9 Mayo 2024
Anonim
Herencia y Polimorfismo | Programación Orientada a Objetos [Video 3]
Video: Herencia y Polimorfismo | Programación Orientada a Objetos [Video 3]

Contenido


La herencia permite, la reutilización del código y el polimorfismo es la aparición de una función con forma diferente. La diferencia básica entre herencia y polimorfismo es que la herencia permite que el código ya existente se reutilice nuevamente en un programa, y ​​el polimorfismo proporciona un mecanismo para decidir dinámicamente qué forma de función se invoca.

  1. Cuadro comparativo
  2. Definición
  3. Diferencias clave
  4. Conclusión

Cuadro comparativo

Bases para la comparaciónHerenciaPolimorfismo
BásicoLa herencia es crear una nueva clase usando las propiedades de la clase ya existente.El polimorfismo es básicamente una interfaz común para formas múltiples.
ImplementaciónLa herencia se implementa básicamente en las clases.El polimorfismo se implementa básicamente en función / métodos.
UtilizarPara apoyar el concepto de reutilización en OOP y reduce la longitud del código.Permite que el objeto decida qué forma de la función se invocará cuando, en tiempo de compilación (sobrecarga) así como en tiempo de ejecución (anulación).
FormasLa herencia puede ser una herencia única, herencia múltiple, herencia multinivel, herencia jerárquica y herencia híbrida.El polimorfismo puede ser un polimorfismo en tiempo de compilación (sobrecarga) o un polimorfismo en tiempo de ejecución (anulación).
EjemploLa tabla de clase puede heredar la característica de los muebles de clase, ya que una mesa es un mueble.La clase study_table también puede tener la función set_color () y una clase Dining_table también puede tener la función set_color (), entonces, qué forma de la función set_color () invocar se puede decidir en ambos, el tiempo de compilación y el tiempo de ejecución.


Definición de herencia:

La herencia es una de las características cruciales de OOP, que respalda firmemente la "reutilización". La reutilización podría describirse como la creación de una nueva clase reutilizando las propiedades de la clase existente. En herencia, hay una clase base, que es heredada por la clase derivada. Cuando una clase hereda cualquier otra clase, los miembros de la clase base se convierten en los miembros de una clase derivada.

La forma general de heredar una clase es la siguiente:

clase nombre-clase-derivada: especificador-acceso nombre-clase-base {// cuerpo de la clase};

Aquí, el especificador de acceso proporciona el modo de acceso (privado, público, protegido) a los miembros de la clase base a la clase derivada. Si no hay un especificador de acceso, por defecto, se considera "privado". En C ++, si la clase derivada es "struct", el especificador de acceso es "público" de forma predeterminada.


En C ++, la herencia se puede lograr en cinco formas. Se pueden clasificar como: -

  • Herencia individual (solo una superclase)
  • Herencia múltiple (varias superclases)
  • Herencia jerárquica (una superclase, muchas subclases)
  • Herencia múltiple (derivada de una clase derivada)

En Java, la clase hereda la otra clase usando la palabra clave "extend". En Java, la clase base se denomina superclase y la clase derivada se denomina subclase. Una subclase no puede acceder a los miembros de la clase base, que se declaran como "privados". La forma general que hereda la clase en Java es la siguiente.

el nombre-clase-derivado de la clase extiende el nombre-clase-base {// cuerpo de la clase};

Java no admite la herencia de herencia múltiple, mientras que admite la jerarquía multinivel. En Java, a veces una superclase puede querer ocultar sus detalles de implementación, y hace que parte de esa información sea "privada". Como en Java, una subclase no puede acceder a los miembros privados de la superclase y si una subclase quiere acceder o inicializar esos miembros, Java proporciona una solución. La subclase puede referir a los miembros de su superclase inmediata mediante el uso de una palabra clave "super". Recuerde, solo puede acceder a los miembros de la superclase inmediata.

El "super" tiene dos formas generales. El primero es que solía llamar al constructor de la superclase. El segundo es acceder al miembro de la superclase que ha estado oculto por el miembro de la subclase.

// primera forma de llamar al constructor. clase supper_class {supper_class (argumento_lista) {..} // constructor de superclase}; clase sub_clase extiende supper_class {sub_class (argumento_lista) {..} // constructor de sub_clase super (argumento_lista); // sub_class llama al constructor de la superclase}};

// segundo para de super class supper_class {int i; } clase sub_clase extiende supper_class {int i; sub_clase (int a, int b) {super.i = a; // i de superclase i = b; // i de subclase}};

Definición de polimorfismo

El término polimorfismo simplemente significa "una función, múltiples formas". El polimorfismo se logra tanto en tiempo de compilación como en tiempo de ejecución. El polimorfismo en tiempo de compilación se logra mediante la "sobrecarga", mientras que el polimorfismo en tiempo de ejecución se logra mediante la "anulación".

El polimorfismo permite que el objeto decida "qué forma de la función se invocará cuando" tanto en tiempo de compilación como en tiempo de ejecución.
Analicemos el primer concepto de sobrecarga. En la sobrecarga, definimos una función en la clase más de una vez con diferentes tipos de datos y el número de parámetros, mientras que la función a sobrecargar debe tener el mismo tipo de retorno. La mayoría de las veces las funciones para los sobrecargados son constructores de la clase.

sobrecarga de clase {int a, b; public: int overload (int x) {// primer constructor overload () a = x; devolver a; } int overload (int x, int y) {// segundo constructor overload () a = x; b = y; devuelve a * b; }}; int main () {sobrecarga O1; O1 sobrecarga (20); // primera llamada al constructor overload () O1.overload (20,40); // segunda llamada al constructor overload ()}

Ahora, analicemos la segunda forma de polimorfismo, es decir, anulación. El concepto de anulación solo se puede implementar a la función de las clases que también implementan el concepto de herencia. En C ++, la función que se va a reemplazar está precedida por la palabra clave "virtual" en la clase base y se redefine en la clase derivada con el mismo prototipo, excepto la palabra clave "virtual".

class base {public: virtual void funct () {// función virtual de base class cout << "Esta es una función de clase base ()"; }}; clase derivada1: base pública {pública: void funct () {// función virtual de la clase base redefinida en derivada de clase derivada << "Esta es una función derivada de 1 clase ()"; }}; int main () {base * p, b; derivado1 d1; * p = & b; p-> funct (); // llama a la clase base funct (). * p = & d1; devuelve 0; }

  1. La herencia es crear una clase que deriva su característica de una clase ya existente. Por otro lado, el polimorfismo es una interfaz que se puede definir en múltiples formas.
  2. La herencia se implementa en las clases, mientras que el polimorfismo se implementa en los métodos / funciones.
  3. Como la herencia permite que una clase derivada use los elementos y métodos definidos en la clase base, la clase derivada no necesita definir esos elementos o método nuevamente, por lo que podemos decir que aumenta la reutilización del código y, por lo tanto, reduce la longitud del código . Por otro lado, el polimorfismo hace posible que un objeto decida qué forma del método quiere invocar tanto en tiempo de compilación como en tiempo de ejecución.
  4. La herencia se puede clasificar como herencia única, herencia múltiple, herencia multinivel, herencia jerárquica y herencia híbrida. Por otro lado, el polimorfismo se clasifica como sobrecarga y anulación.

Conclusión:

La herencia y el polimorfismo son conceptos interrelacionados, ya que el polimorfismo dinámico se aplica a las clases que también implementan el concepto de herencia.