You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

里氏替换原则疑问:子类新增属性是否违反该原则?

里氏替换原则与继承设计问题解答

里氏替换原则的核心不是强制子类成员放基类

里氏替换原则(LSP)的核心是子类能无缝替换基类的所有使用场景,且不搞乱原有逻辑,它完全没有要求引用其他类的成员必须定义在基类里。基类只该放所有子类共有的属性和行为,子类完全可以有自己独有的特性,只要这些特性不会让子类在替换基类时出问题。

你的代码继承设计没问题

先看给出的代码:

abstract Location // 设施里的地点
{
    public string Name;
}

Warehouse:Location
{
    public int Capacity;
    public TypeOfProduct Product; ///--- 这个该放基类吗?那继承Location是不是不合适?
}
  1. 继承关系合理:仓库(Warehouse)本来就是一种地点(Location),符合"is-a"的继承逻辑,没毛病。
  2. Product绝对不该放基类:不是所有地点都需要关联产品,比如设施里的办公室、休息室这些地方,根本不需要Product属性。要是硬把它塞到基类,那些不需要的子类就得被迫继承这个多余的属性,既不符合业务逻辑,还违反里氏替换原则——用Location类型变量引用这些子类时,平白多出个没用的属性,很容易导致逻辑混乱。

所以你的代码设计是对的,Warehouse保留自己独有的Capacity和Product属性完全符合设计原则。


内容的提问来源于stack exchange,提问作者Artur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 07:10:57