Herencia

C++

Expresion

Se expresa en la implementación de una clase mediante el uso del operador dos puntos : seguido del tipo de herencia y del nombre de la clase base de la que se busca heredar.

Herencia publica

class ClaseDerivada : public ClaseBase

Herencia privada

class ClaseDerivada : private ClaseBase

Herencia protegida

class ClaseDerivada : protected ClaseBase

Codigo

Los constructores no se heredan

Ejemplo

Clase Padre

class Figura{
protected:
float x;
public:
Figura(float cx=0){
x = cx;
}
virtual float Perimetro() = 0;
virtual float Area() = 0;
};

Clase Derivada

class Cuadrado: public Figura
{
public:
Cuadrado(float lado){
x = lado;
}
float Perimetro(){
return 4 * x;
}
float Area(){
return x * x;
}
};

Definicion

Permite la reusabilidad de variables y funcionalidades que se han definido en otras clases.

Clase Base

Una clase que va a heredar sus propiedades (variables) y funcionalidades (métodos) a otras clases

Clase Derivada

Una clase que se implementa mediante la reutilización de las propiedades y funcionalidades que se heredan de una (o varias) clase base.

Reutilización:

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.

Java

Expresión

Para indicar que la clase B (clase derivada)
hereda de la clase A (clase base)
se emplea la palabra reservada extends en la cabecera de la declaración de la clase descendiente

Herencia publica

public class ClaseB extends ClaseA

Herencia privada

private class ClaseB extends ClaseA

Herencia protegida

protected class ClaseB extends ClaseA

Codigo

Los constructores no se heredan

Ejemplo

Clase Padre

class DosDimensiones{
private double base;
private double altura;

void mostrarDimension(){
System.out.println("La base y altura es: "+base+" y "+altura);
}
}

Clase Derivada

class Triangulo extends DosDimensiones{
String estilo;
double area(){
return base*altura/2; //Error! no se puede acceder
}
void mostrarEstilo(){
System.out.println("Triangulo es: "+estilo);
}
}

Tipos de Herencia

Herencia pública

Todos los miembros públicos y protegidos de la clase base conservan esos mismos niveles de acceso respectivamente en las clases derivadas.

Herencia protegida

Todos los miembros públicos de la clase base adquieren el nivel de acceso protegido en las clases derivadas, mientras que los miembros protegidos conservan su nivel de acceso

Herencia privada

Todos los miembros públicos y protegidos de la clase base adquieren el nivel de acceso privado en las clases derivadas. De ahí se desprende que una clase derivada que haya heredado mediante herencia privada no puede heredar a otras clases los miembros que ha heredado de otras clases.

Control de Acceso