Я пытаюсь создать пример нарушения принципа Лискова для изучения:
import std.stdio;
class Pessoa {
string nome;
string apelido;
this(string nome, string apelido){
this.nome = nome;
this.apelido = apelido;
}
invariant{
assert(nome != apelido);
}
}
class BoaPessoa : Pessoa {
this(string nome, string apelido){
super(nome, apelido);
}
string getNomeCompleto(){
return this.nome ~"vulgo" ~ this.apelido;
}
}
class MalvadaPessoa : Pessoa {
this(string nome, string apelido){
super(nome, apelido);
}
override invariant{
assert(this.nome != "");
}
}
void main(){
BoaPessoa bp = new BoaPessoa("João","Joãozinho");
MalvadaPessoa mp = new MalvadaPessoa("x", "Joãzinho");
}
Но я не смог переопределить инвариант класса MalvadaPessoa, у меня есть эта ошибка :
main.d (25): Ошибка: функция main.MalvadaPessoa .__ invariant2 не может переопределить не-виртуальную функцию
И без переопределения, MalvadaPessoa имеет два утверждения и не только один переопределенный
Итак, как переопределить инвариантный метод в расширенном классе?