Se caracterizan por el hecho de que no pueden ser implementados en la clase base. De ellos, solo se escribe su signatura en la superclase, y su funcionalidad –polimórfica– tiene que indicarse en las clases derivadas (subclases).
Cuando deseamos definir una abstracción que englobe objetos de distintos tipos y queremos hacer uso del polimorfismo
abstract class Figura
{
private string color;
public Figura(string color)
{
this.Color = color;
}
public abstract double CalcularArea();
protected string Color { get => color; set => color = value; }
}
class Cuadrado : Figura
{
private double lado;
public Cuadrado(string color, double lado) : base(color)
{
this.lado = lado;
}
public override double CalcularArea()
{
return lado * lado;
}
}
interface Figura
{
double CalcularArea();
}
…es una especie de plantilla para la construcción de clases. Normalmente una interfaz se compone de un conjunto de declaraciones de cabeceras de métodos (sin implementar, de forma similar a un método abstracto) que especifican un protocolo de comportamiento para una o varias clases.
…una clase puede implementar una o varias interfaces: en ese caso, la clase debe proporcionar la declaración y definición de todos los métodos de cada una de las interfaces.
...son una forma de especificar qué debe hacer una clase sin especificar el cómo.
class Cuadrado : Ifigura, IDibujable, IRotable
{
public double CalcularArea()
{
//... proceso para calcular area
return 0.0;
}
public void dibujar()
{
//... proceso para dibujar
}
public void rotar(int grados)
{
//... proceso para rotar
}
}