Omu*_*Omu 2 liskov-substitution-principle solid-principles
如果我有类似的东西
class square : figure {}
class triangle : figure {}
Run Code Online (Sandbox Code Playgroud)
这是否意味着我永远不应该使用方形和三角形类,而只是参考图?
就像从来没有这样:
var x = new square();
Run Code Online (Sandbox Code Playgroud)
在您的情况下,LSP意味着从中继承的所有行为figure都应该适合于square或triangle.所以,你不希望有制定者figure.Side1,Side2以及Side3因为这些不会为一个意义square.
在某些时候,你必须引用square或者triangle,但仅限于你所做的事情是特定于子类的情况.如果你实现的行为同样适用于所有数字(也许是Draw方法),那么它应该接受一个figure参数而不是一个square或triangle.
例如,您的类可能设置如下:
abstract class figure
{
abstract void draw();
}
class triangle : figure
{
void draw()
{
// ...
}
}
class drawer
{
void call_draw(figure fig)
{
fig.draw();
}
}
Run Code Online (Sandbox Code Playgroud)
只要figure.draw()是虚拟的,这意味着它的实现可以(或必须)的一个子类重写,您可以执行triangle的draw(),即使对象正在使用的行为figure.