Skip to main content

You are not logged in. Your edit will be placed in a queue until it is peer reviewed.

We welcome edits that make the post easier to understand and more valuable for readers. Because community members review edits, please try to make the post substantially better than how you found it, for example, by fixing grammar or adding additional resources and hyperlinks.

Required fields*

6
  • "If all your objects are immutable, there is no problem" -- this is apparently irrelevant statement in the context of this question, which explicitly mentions setters for width and height Commented May 7, 2014 at 11:38
  • 11
    I found this interesting, even when it's "apparently irrelevant" Commented May 7, 2014 at 12:03
  • 17
    @gnat I'd argue it's relevant because the real value of the question is recognizing when there's a valid subtyping relationship between two types. That depends on which operations the supertype declares, so it's worth pointing out the problem goes away if the mutator methods go away. Commented May 7, 2014 at 12:52
  • 1
    @gnat also, setters are mutators, so lrn is essentially saying, "Don't do that and it's not a problem." I happen to agree with immutability for simple types, but you make a good point: For complex objects, the problem is not so simple. Commented May 7, 2014 at 15:50
  • 1
    Consider it this way, what is the behavior guaranteed by 'Rectangle' class ? That you can change width and height INDEPENDENT of each other. (i.e. setWidth and setHeight) method. Now if Square is derived from Rectangle, Square has to guarantee this behavior. Since square cannot guarantee this behavior, its a bad inheritance. However, if setWidth/setHeight methods are removed from Rectangle class, then there is no such behavior and hence you can derive Square class from Rectangle. Commented May 9, 2014 at 13:59