Herencia en programación orientada a objetos

1 - Herencia en POO

Herencia es un concepto de la programación orientada a objetos. El cual es un mecanismo que permite derivar una clase a otra clase.

En otras palabras, tendremos unas clases que serán hijos, y otras clases que serán padres.

Las clases hijas pueden utilizar tanto sus métodos y propiedades como de la clase padre, siempre que su modificador de acceso lo permita. 

Por ejemplo, el siguiente código

class Vehiculo
{
    public decimal VelocidadMaxima { get; set; }
    public int NumeroRuedas { get; set; }
    public string Marca { get; set; }
    public string Modelo { get; set; }

}

class Moto : Vehiculo
{
    public int Cilindrada { get; set; }
}

class Coche : Vehiculo 
{
    public string Traccion { get; set; }
}

Traducido a una imagen será la siguiente:

ejemplo herencia programacion orientada a objetos

 

Como podemos observar tanto coche como Moto apuntan a Vehiculo, eso quiere decir que pueden usar tanto sus propiedades como sus métodos. Por lo que el siguiente código Moto.VelocidadMaxima o Moto.Cilindrada es igual de válido que Coche.VelocidadMaxima o Coche.Traccion.

Para indicar que una clase deriva de otra debemos indicarlo con los dos puntos : como vemos en el ejelmplo.

Cuando heredamos de una clase padre únicamente podemos hacerlo de una sola clase. No podemos heredar de dos clases, por ejemplo class Triciclo : Mixto, Vehiculo no es válido.

Pero si en este ejemplo, la clase Mixto hereda de Vehiculo, si podemos hacer lo siguiente:

class Vehiculo{
    //Código
}

class Mixto : Vehiculo{
    //Código
}

class Triciclo : Mixto{
    //Codigo
}

Como observamos Mixto hereda de Vehiculo, y Triciclo hereda de Mixto por lo que desde triciclo tendremos acceso a las propiedades de la clase Vehiculo como vemos en el ejemplo.

class Vehiculo
{
    public int NumeroRuedas { get; set; }
}

class Mixto : Vehiculo
{
    //Código
}

class Triciclo : Mixto
{
    public void AsignarRuedas()
    {
        NumeroRuedas = 3;
    }
}

2 - Declaración de constructores

Cuando creamos un constructor declaramos un método sin retorno y que se llama igual que la clase.

.Net nos genera por defecto a través de la clase object el constructor por defecto, el cual es un constructor vacío sin argumentos. Pero, qué pasa si queremos tener uno personalizado, y la clase padre también posee un constructor.

Para ello debemos de seguir la jerarquía de que ambos constructores se van a ejecutar. Para ello deberemos de indicar desde el constructor de la clase hijo que parámetros vamos a pasar a la clase padre.

Los parámetros que vamos a enivar desde la clase hijo a la clase padre los indicaremos utilizando  :base(parametros) 

class Vehiculo
{
    public decimal VelocidadMaxima { get; set; }
    public int NumeroRuedas { get; set; }
    public string Marca { get; set; }
    public string Modelo { get; set; }

    public Vehiculo(string marca, string modelo){
        Marca = marca;
        Modelo = modelo
    }
}

class Moto : Vehiculo
{
    public int Cilindrada { get; set; }

    public Moto(string marca, string modelo, int cilindrada) : base(marca, modelo){
        Cilindrada  = cilindrada;
    }
}

Como podemos observar en el ejemplo la clase padre Vehiculo, tiene un constructor con dos parámetros, por lo que desde la case hijo Moto, hemos creado un constructor que contiene, además del parámetro necesario para la propiedad de esa clase, dos adicionales que son enviados a la clase padre utilzando :base()

3 - Una clase hijo es también tipo de la clase padre

Una clase hijo no solo hereda los métodos y propiedades de la clase padre. Sino que además también hereda el tipo de la clase padre.

Si ejecutamos el siguiente código:

Vehiculo vehiculo = (Vehiculo)new Moto("ducati", "A1", 1000);

Vemos que lo realiza sin ningún problema, pero debido a que lo hemos convertido la clase Moto a la clase Vehiculo no podremos acceder a las propiedades de moto.

 

Enlace para descargar el código en GitHub.


Soporte


2019 NetMentor.
Todos los derechos reservados.
Aviso legal | Politica privacidad | Politica de cookies