TOC

This article has been localized into Spanish by the community.

Clases:

Clases abstractas

Clases abstractas, marcadas con la palabra clave "abstracto" en la definición de clase, son usadas tipicamente para definir una clase base en la jerarquía. Lo especial de estas, es que no puedes crear una instancia para las mismas - si lo intentas, tendrás un error de compilación. Dado el caso, tienes que crearlas como una subclase, como lo enseñado en el capitulo "herencia", y crear una instancia de tu subclase. Dicho esto ¿Cuando necesitas una clase abstracta? Realmente depende en lo que tratas de hacer.

Para ser honesto, puedes llegar a un estado avanzado en tu trabajo y no haber necesitado de una clase abstracta, pero son grandiosas para cosas especificas, como frameworks, lo cual es el porque encontraras una buena cantidad de clases abstractas dentro del framework .NET. Como buena regla general es que el nombre realmente tenga un gran sentido; clases abstractas son comúnmente, sino siempre, utilizadas para describir algo abstracto, mas cercano a un concepto que a un objeto real.

En este ejemplo, crearemos una clase base para "FourLeggedAnimal" y luego crear una clase llamada "dog", lo cual hereda de este, como veremos a continuacion:

namespace AbstractClasses
{
    class Program
    {
        static void Main(string[] args)
        {
            Dog dog = new Dog();
            Console.WriteLine(dog.Describe());
            Console.ReadKey();
        }
    }

    abstract class FourLeggedAnimal
    {
        public virtual string Describe()
        {
            return "Not much is known about this four legged animal!";
        }
    }

    class Dog : FourLeggedAnimal
    {

    }
}

Si lo comparas con los ejemplos en el capítulo sobre herencia, no verás gran diferencia. De hecho, la palabra clave abstract delante de la definición de FourLeggedAnimal es la mayor diferencia. Como puedes ver, creamos una nueva instancia de la clase Dog y luego invocamos al método Describe() heredado de la clase FourLeggedAnimal. En lugar de eso, intenta ahora crear una instancia de la clase FourLeggedAnimal:

FourLeggedAnimal someAnimal = new FourLeggedAnimal();

Obtendrás este error de compilación:

No se puede crear una instancia de la clase o interfaz abstracta 'AbstractClasses.FourLeggedAnimal'

Ahora, como puedes ver, heredamos el método Describe(), pero no es muy útil en su forma actual, para nuestra clase Dog. Redefinámoslo:

class Dog : FourLeggedAnimal
{
    public override string Describe()
    {
        return "This four legged animal is a Dog!";
    }
}

En este caso, redefinimos el método completamente, pero en algunos casos, podrías querer usar el comportamiento de la clase base además de la nueva funcionalidad. Esto se puede hacer usando la palabra clave base, la cual hace referencia a la clase de la cual estamos heredando:

abstract class FourLeggedAnimal
{
    public virtual string Describe()
    {
        return "This animal has four legs.";
    }
}


class Dog : FourLeggedAnimal
{
    public override string Describe()
    {
        string result = base.Describe();
        result += " In fact, it's a dog!";
        return result;
    }
}

Ahora obviamente, puedes crear otras subclases de la clase FourLeggedAnimal - ¿tal vez un gato o un leon? En el siguiente capítulo, haremos un ejemplo más avanzado y presentaremos también métodos abstractos. Continúa leyendo.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!