D permite la definición de interfaces mediante la palabra reservada interface
.
Las interfaces son ténicamente igual que clases, pero sus métodos tienen que
ser implementados por toda clase que herede de ellas.
interface Animal {
void makeNoise();
}
Por ejemplo, en esta interfaz, Animal
, el método makeNoise
tiene que ser
implementado por la clase Dog
, ya que esta clase hereda de dicha interfaz.
Esencialmente el método makeNoise
se comporta como un método abstracto de
la clase base.
class Dog : Animal {
override void makeNoise() {
...
}
}
auto dog = new Dog;
Animal animal = dog; // 'cast' implícito a interfaz
animal.makeNoise();
El número de interfaces de las que una clase puede heredar no está limitado, pero una clase sólo puede heredar de una clase base.
El patrón NVI
permite métodos no virtuales dentro de una interfaz común. Es por esto por lo
que este patrón previene la violación de patrones de ejecución comunes.
D activa el patrón NVI permitiendo usar la palabra reservada final
(es
decir, que no se pueden sobreescribir) en funciones dentro de las interfaces.
Esto fuerza comportamientos específicos que pueden ser personalizados al
sobreescribir otras funciones marcadas como abstractas dentro de las interfaces.
interface Animal {
void makeNoise();
final doubleNoise() { // patrón NVI
makeNoise();
makeNoise();
}
}