的问题是(构建Java程序,第3版第9章自检问题19):很好的继承设计
试想一个Rectangle类代表二维矩形对象。矩形具有带适当访问器和增变器的宽度和高度字段,以及getArea和getPerimeter方法。
您想在您的系统中添加一个Square类。使Square成为Rectangle的一个子类是否是一个好设计?为什么或者为什么不?
建筑的Java程序给出的答案是:
具有正方形延伸矩形是一个糟糕的设计,因为一个方不能代替一个矩形。如果客户端认为Square是一个矩形并且在其上调用setWidth或setHeight,则会发生意外的结果。客户预计在通话结束后宽度和高度会有所不同,但他们可能不会。
我认为Square应该扩展Rectangle,因为它是一个更具体的Rectangle类型。因此,继承矩形的所有一般性,再加上一个更具体的特征,即宽度和高度是相同的。
我也不明白为什么这本书说这是一个糟糕的设计“因为广场不能代替矩形”。我认为这是相反的,因为如果Rectangle类不能替代Square类,则不能扩展。
“书”?哪本书? –
构建Java程序 - 回到基础的方法,第3版 – CMSC
添加到这个问题,也许呢? –