Paralelo herencia entre Java y C++

¿Qué es la herencia?

La herencia es un pilar importante de OOP (Programación Orientada a Objetos).

Herencia en Java

En el lenguaje de Java, una clase que se hereda se denomina superclase. La clase que hereda se llama subclase. Por lo tanto, una subclase es una versión especializada de una superclase. Hereda todas las variables y métodos definidos por la superclase y agrega sus propios elementos únicos.

Terminología importante

Superclase: la clase cuyas características se heredan se conoce como superclase (o una clase base o una clase principal).

Subclase: la clase que hereda la otra clase se conoce como subclase (o una clase derivada, clase extendida o clase hija). La subclase puede agregar sus propios campos y métodos además de los campos y métodos de la superclase.

Reutilización: la herencia respalda el concepto de “reutilización”, es decir, cuando queremos crear una clase nueva y ya hay una clase que incluye parte del código que queremos, podemos derivar nuestra nueva clase de la clase existente. Al hacer esto, estamos reutilizando los campos/atributos y métodos de la clase existente.

Ejemplo de cómo usar la herencia en Java

Ejemplo: Comencemos con un breve ejemplo que ilustra varias de las características clave de la herencia. El siguiente programa crea una superclase llamada DosDimensiones, que almacena el ancho y la altura de un objeto bidimensional, y una subclase llamada Triangulo. Observe cómo se usa la palabra clave extends para crear una subclase.

//Clase para objetos de dos dimensiones
class DosDimensiones{

double base;
double altura;

void mostrarDimension(){

System.out.println("La base y altura es:
"+base+" y "+altura);

}

}

//Una subclase de DosDimensiones para Triangulo
class Triangulo extends DosDimensiones{
String estilo;

double area(){

return base*altura/2;

}

void mostrarEstilo(){

System.out.println("Triangulo es: "+estilo);

}

}


class Lados3{

public static void main(String[] args) {

Triangulo t1=new Triangulo();

Triangulo t2=new Triangulo();

t1.base=4.0;

t1.altura=4.0;

t1.estilo="Estilo 1";

t2.base=8.0;

t2.altura=12.0;

t2.estilo="Estilo 2";


System.out.println("Información para T1: ");

t1.mostrarEstilo();

t1.mostrarDimension();

System.out.println("Su área es: "+t1.area());


System.out.println();
System.out.println("Información para T2: ");

t2.mostrarEstilo();

t2.mostrarDimension();

System.out.println("Su área es: "+t2.area());



}

}

Información para T1:
Triangulo es: Estilo 1
La base y altura es: 4.0 y 4.0

Su área es: 8.0

Información para T2:

Triangulo es: Estilo 2

La base y altura es: 8.0 y 12.0

Su área es: 48.0

Herencia en C++

En terminología estándar C++, una clase que es heredada es referida como la clase 'base'. La clase que efectúa la herencia es llamada la clase 'derivada'. Además, una clase derivada puede ser usada como una clase base por otra clase derivada. De esta manera, una jerarquía multicapa de clases puede ser lograda.

C++ soporta herencia permitiendo a una clase incorporar otra clase dentro de su declaración. Antes de discutir los detalles y la teoría, comencemos por un ejemplo de herencia. La siguiente clase, llamada vehiculo_rodante, define muy ampliamente a vehículos que viajan en la carretera. Este almacena el numero de ruedas que un vehículo tiene y el numero de pasajeros que puede llevar.

Tip: "Una clase base es heredada por una clase derivada"

class vehiculo_rodante {

int ruedas;

int pasajeros;


public:

void set_ruedas(int num) { ruedas = num;}

int get_ruedas() { return ruedas; }

void set_pasajeros(int num) { pasajeros = num; }

int get_pasajeros() { return pasajeros; }

};

Puede usar esta amplia definición de un vehículo rodante para ayudar a definir tipos específicos de vehículos. Por ejemplo, el fragmento de código mostrado aqui podría usarse para ser heredado por una clase llamada 'camion'.

class camion : public vehiculo_rodante {

int carga;


public:

void set_carga(int size) { carga = size; }

int get_carga() { return carga; }

void mostrar();

};

Como 'camion' hereda de 'vehiculo_rodante', 'camion' incluye todo de 'vehiculo_rodante'. Entonces agrega 'carga' a la misma, en conjunto con las funciones miembros que trabajen sobre este dato.

Nótese como 'vehiculo_rodante' es heredado. La forma general para la herencia se muestra aquí:

class clase_derivada : acceso clase_base {

cuerpo de la nueva clase

}