To expand on what I mean...
If your app only needs to deal with squares, and will only ever need to deal with squares, then a Squares class is all you need - Shapes and Rectangles don't come into it.
If your app only needs to deal with squares now, but in the future will need Rectangles and other shapes, then its a good idea to incorporate these abstractions into your class hierarchy from the outset.
You can only use inheritance if you have something appropriate (ie more generic) to inherit from - ie. you can't inherit from Squares to get Shapes, for example.
OK, you can refactor the code at a later point, but its a lot easier, quicker and cheaper to just drop in an extra class into a well thought out inheritance hierarchy than to refactor the design to accomodate requirements that were anticipated from the outset.
The point is, that all abstraction is an approximation - you need to make sure its appropriate to what you want, and there is, therefore no definitive answer to the original question.