主题
周刊群偷点话题。
长方形-正方形是违反里氏替换的典型例子。如果正方形继承了长方形,setW、setH 也会继承过来,显然语义不对。
数学上的正方形是长方形,is-a 关系成立,但不代表对象语义的 is-a 成立。里氏替换要求子类必须满足父类的行为契约,这里就违反了。
正确做法是 Square 和 Rectangle 都继承 Shape。