Recomendado, 2024

La Elección Del Editor

Diferencia entre herencia y polimorfismo

La herencia lo permite, la reutilización del código y el polimorfismo es, la ocurrencia 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 de forma dinámica qué forma de una función se invoca.

Gráfica comparativa

Bases para la comparaciónHerenciaPolimorfismo
BASICLa herencia es crear una nueva clase usando las propiedades de la clase ya existente.El polimorfismo es básicamente una interfaz común para múltiples formas.
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 invoca cuando, en tiempo de compilación (sobrecarga), así como 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 de tiempo de compilación (sobrecarga) o un polimorfismo de tiempo de ejecución (anulación).
EjemploLa 'tabla' de clase puede heredar la característica de la clase 'muebles', ya que una 'mesa' es un 'mobiliario'.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 ()', por lo que la forma de la función set_color () se puede decidir tanto a la hora de compilación como correr tiempo

Definición de herencia:

La herencia es una de las características cruciales de la OOP, que apoya firmemente la "reutilización". La reutilización podría describirse como la creación de una nueva clase al reutilizar 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, el miembro (s) de la clase base se convierte en el miembro (s) de una clase derivada.

La forma general de heredar una clase es la siguiente:

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

Aquí, el especificador de acceso proporciona el modo de acceso (privado, público, protegido) al miembro (s) en la clase base a la clase derivada. Si no hay un especificador de acceso presente, por defecto, se considera como "privado". En C ++, si la clase derivada es "struct", el especificador de acceso es "public" por defecto.

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

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

En Java, la clase hereda la otra clase usando la palabra clave "extiende". En Java, la clase base se conoce como una súper clase y la clase derivada se denomina una subclase. Una subclase no puede acceder a aquellos miembros de la clase base, que se declaran como "privados". La forma general que hereda la clase en Java es la siguiente.

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

Java no admite la herencia de herencia múltiple, mientras que admite jerarquía de varios niveles. En Java, a veces una súper clase puede ocultar sus detalles de implementación, y hace que parte de esos datos sea "privada". Al igual que en Java, una subclase no puede acceder a los miembros privados de la superclase y si una subclase quiere acceder o inicializar a esos miembros, entonces Java ofrece una solución. La subclase puede referir a los miembros de su superclase inmediata usando una palabra clave "super". Recuerde, solo puede acceder a los miembros de la superclase inmediata.

El 'super' tiene dos formas generales. La primera es, se usa para llamar al constructor de la súper clase. La segunda es, para acceder al miembro de la superclase que ha sido oculto por el miembro de la subclase.

 // primera forma de llamar al constructor. class supper_class {supper_class (argument_list) {..} // constructor de super clase}; class sub_class extiende supper_class {sub_class (argument_list) {..} // constructor de sub_class super (argument_list); // sub_class llama al constructor de la superclase}}; 
 // segundo para de 'super' class supper_class {int i; } class sub_class extiende supper_class {int i; sub_class (int a, int b) {super.i = a; // 'i' de la super clase i = b; // 'i' de la 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 tiempo de compilación del polimorfismo se logra a través de la "sobrecarga", mientras que el tiempo de ejecución del polimorfismo se logra a través de 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.
Vamos a discutir 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 a las sobrecargadas son constructores de la clase.

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

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

 class base {public: virtual void funct () {// virtual function of base class cout << "Este es el funct de una clase base ()"; }}; class Derivada1: base pública {public: void funct () {// función virtual de la clase base redefinida en derivada1 clase cout 

Diferencias clave entre herencia y polimorfismo

  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 le permite a una clase derivada usar los elementos y métodos definidos en la clase base, la clase derivada no necesita definir esos elementos o usar el método nuevamente, así podemos decir que aumenta la capacidad de 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 desea invocar tanto en tiempo de compilación como en tiempo de ejecución.
  4. La herencia se puede clasificar como herencia simple, 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.

Top