我读过一些关于使Square成为Rectangle类的继承类的做法的文章,这是一种不好的做法,称它违反了LSP(Liskov替代原则)。我仍然不明白,我在Ruby中做了一个示例代码:Square和Rectangle继承有什么问题?
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
有人能告诉我它有什么问题吗?
块状太空公主? http://www.youtube.com/watch?v=pJTrD3R5cj0 – paxdiablo
哇,这很有趣,但我不太明白 – mko
yozloy,道歉,我只是提出一点,你可能想解释你的意思LSP,以便那些不知道它的人不必搜索。 – paxdiablo