La .NET CONF 2024 acaba de terminar. Descubre las NOVEDADES de .NET 9 junto a los CAMBIOS que trae C# 13.
Puedes ver el contenido de este vídeo junto con su curso en el modo vídeo (similar a Udemy) si pulsas aquí.

Polimorfismo en programación orientada a objetos

14 Sep 2019 5 min (0) Comentarios

Bienvenidos a este nuevo post en el que seguiremos hablando de los pilares fundamentales de la programación orientada a objetos, el polimorfismo.

 

1-  Qué es el polimorfismo en programación orientada a objetos

Denominamos polimorfismo al mecanismo que nos permite tener un método en una clase padre como vimos en la herencia (link) y sobrescribirlo en la clase hija. 

Esto quiere decir que tendremos el mismo método en ambas clases, pero en la clase hija realizara diferentes acciones. Por lo que el polimorfismo es también denominado sobreescritura de métodos.

Hay dos formas de polimorfismo

  1. En tiempo de ejecución, que tiene que ver con las interfaces (post disponible en unas semanas)
  2. La segunda llamada polimorfismo estático, la cual determina que método se va a ejecutar durante la compilación. 

 

 

2 – Polimorfismo estático en C#

2.1 – Utilizando la palabra clave new

Para indicar que queremos sobrescribir un método debemos hacerlo utilizando la palabra reservada new antes del nombre del método en la clase hijo. La cual nos crea una nueva versión del método, únicamente para esa clase.

Con ello lo que conseguimos es permitir que llamando “al mismo método” se realicen acciones diferentes.

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;
    }
    public void Acelerar()
    {
        Console.WriteLine("Acelerar vehículo");
        //Pisar el acelerador
    }

}

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

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

    public new void Acelerar()
    {
        //Girar el puño
        Console.WriteLine("Acelerar Moto");
    }
}

Como podemos observar el método Acelerar de la clase Moto contiene la palabra reservada new, ello causara que si llamamos a Moto.Acelerar() se ejecutara el nuevo código, Mientras que si tenemos otra clase, como Vehiculo.Acelerar(), o Coche.Acelerar() si utilizamos los ejemplos del post anterior, se ejecutara el de la clase Vehiculo, ya que Coche no posee un método que sobrescriba al de la clase padre.

 

2.2- Utilizando las palabras clave virtual y override

En el mundo laboral, utilizar la forma con la palabra clave new no es muy común, ya que da la sensación de que no se va a sobrescribir y puede llegar a ser muy confuso. 

Para evitar esta sensación se puede indicar en el método padre que este va a ser sobrescrito utilizado la palabra clave virtual

public virtual void Acelerar()
{
    Console.WriteLine("Acelerar vehículo");
    //Pisar el acelerador
}

Y en el método de la clase hija, se indica con la palabra override que va a sobrescribir al método padre.

Es importante recordar que no podemos utilizar la palabra clave override si el método padre no es virtual.

public override void Acelerar()
{
    //Girar el puño
    Console.WriteLine("Acelerar Moto");
}

Aquí podemos ver el ejemplo completo:

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;
    }
    public virtual void Acelerar()
    {
        Console.WriteLine("Acelerar vehículo");
        //Pisar el acelerador
    }

}

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

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

    public override void Acelerar()
    {
        //Girar el puño
        Console.WriteLine("Acelerar Moto");
    }
}

Uso del bloqueador de anuncios adblock

Hola!

Primero de todo bienvenido a la web de NetMentor donde podrás aprender programación en C# y .NET desde un nivel de principiante hasta más avanzado.


Yo entiendo que utilices un bloqueador de anuncios como AdBlock, Ublock o el propio navegador Brave. Pero te tengo que pedir por favor que desactives el bloqueador para esta web.


Intento personalmente no poner mucha publicidad, la justa para pagar el servidor y por supuesto que no sea intrusiva; Si pese a ello piensas que es intrusiva siempre me puedes escribir por privado o por Twitter a @NetMentorTW.


Si ya lo has desactivado, por favor recarga la página.


Un saludo y muchas gracias por tu colaboración

© copyright 2024 NetMentor | Todos los derechos reservados | RSS Feed

Buy me a coffee Invitame a un café