我试图创建一个
违反利斯科夫原则
用于学习目的的示例:
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");
}
但我无法覆盖MalvadaPassoa类上的不变量,我遇到了以下错误:
main.d(25):错误:函数main。马尔瓦达佩索亚__不变量2不能
覆盖非虚拟函数
在没有覆盖的情况下,MalvadaPassoa有两个断言,而不仅仅是一个被高估了
那么,如何在扩展类中重写不变方法呢?