Skip to main content

Clases abstractas

Las clases se pueden declarar como abstractas poniendo la palabra reservada abstract antes de la definición de la clase.

public abstract class Figura{
//...
}

Las clases abstractas no se pueden instanciar, su propósito es proporcionar una definición común que modele una jerarquía de herencia. Por ejemplo, se puede definir una clase abstracta que se usa como parámetro para muchas de sus funciones y que los programadores proporcionen su propia implementación a partir de una clase derivada.

No es posible marcar una clase abstracta con el modificador sealed porque ambos modificadores tienen significados opuestos. El modificador sealed evita que una clase se pueda heredar y el modificador abstract requiere que se herede una clase.

Es posible tener variables con tipos que sean abstractos. Estas variables serán null o contendrán referencias a instancias de una clase derivada no-abstracta.

public abstract class Figura
{
//...
}

public class Cuadrado : Figura
{
//...
}

Figura figura = new Cuadrado();

Métodos abstractos

Podemos definir un método como abstracto con la palabra reservada abstract antes del tipo de retorno del método.

Por ejemplo:

public abstract class Figura
{
public abstract float CalcularArea();
}

Los métodos abstractos no tienen implementación, por lo que la definición del método va seguida de un ; en lugar del cuerpo del método. Las clases derivadas de la clase abstracta deben dar una implementación a todos los métodos abstractos.

Las clases abstractas son las únicas que pueden contener miembros abstractos, por lo que las declaraciones de métodos abstractos sólo se permiten en clases abstractas.

La implementación la proporciona un método override que es miembro de una clase no abstracta.

public abstract class Cuadrado : Figura
{
int lado;

public override float CalcularArea(){
return lado * lado;
}
}