【发布时间】:2013-05-24 04:16:15
【问题描述】:
我读过一些关于将 Square 作为 Rectangle 类的继承类是一种不好的做法的文章,说它违反了 LSP(Liskov 替换原则)。我还是不明白,我用 Ruby 做了一个示例代码:
class Rectangle
attr_accessor :width, :height
def initialize(width, height)
@width = width
@height = height
end
end
class Square < Rectangle
def initialize(length)
super(length, length)
end
def width=(number)
super(number)
@height = number
end
def height=(number)
super(number)
@width = number
end
end
s = Square.new(100)
s.width = 50
puts s.height
谁能告诉我这是怎么回事?
【问题讨论】:
-
块状太空公主? youtube.com/watch?v=pJTrD3R5cj0
-
哇,这很有趣,但我不太明白
-
yozloy,抱歉,我只是想说明您可能想解释一下 LSP 的含义,以便那些不了解它的人不必搜索。
-
请不要链接到外部代码托管服务作为您的问题仅内容。您的问题需要独立且可回答,无需依赖任何外部链接。
-
@maerics,我不认为亚当在评论外部链接问题,我怀疑他是在评论实际问题,因为“通过规范”似乎与外部链接无关以及与“如果代码有效,请使用它”有关的一切。
标签: ruby oop liskov-substitution-principle