This is a great book, I would give it 6 stars if I was allowed to. It seems to have 2 things which all other books lack: it teaches from 'the beginning' and it is packed with useful exercises. The author expains the concepts of object oriented programming (in java but the concepts are useful for many other languages!) very well, he doesn't introduce inheritance until half way through the book and by the time he does, you are really ready for it due to the excellent teaching structure of the book. The author seems to have a great way of making you do exercises and getting you to ask yourself questions like 'wouldn't it be handy if there was something like subclassing?', and then surprise surprise!, the next section is on subclassing!
As I said, many other books seem to introduce loads of theory without giving yu any practice. This book gets you practicing and then thinking of the theory youself.
This book works for a range of people. It is great for beginners (although I highly recommend that you do every exercise), but I am sure that many experienced programmers would find it very useful too, at least for brushing up on certain concepts....