I already suggested to the OP (via a PM that predates this thread) that he should, somewhere in the future, when he feels comfortable with classes and basic OOP concepts, read
Design Patterns: Elements of Reusable Object-Oriented Software by Gamma et al.
Everyone should read that book at some point.
Maybe not everyone will dig the style, but this is one of the most important programming books I've ever read, and I'm not the only one with that opinion - aside from the fact that it's a widely recognised work, look what
Martin Fowler has to say:
The code examples here are mostly in C++, but the code is not the main thing here, the patterns are - and they are language independent.
Although this is not "an easy book to read", if you can, I'd recommend to get a copy to have as a reference, and supplement it with something designed to be more appealing to the general audience, or possibly C# audience, such as
this(C#), or
this (Java).
(Disclaimer: don't know about quality, seems OK.)
If you want something more lightweight, I found
this free PDF book called
Object Oriented Programming using C#, and surprisingly, it seems decent enough, teaches some OO concepts as well as basic UML. Since it's free to download, I say give it a try.
I don't really know what else to recommended. Maybe some of these - but consider them intermediate-to-advanced:
Object-Oriented Software Construction; or the rather outdated
Object-Oriented Design Heuristics - it'll provide some insight into the original concepts behind and reasons for OOP, but not all the rules are rigorously followed today (nor should they be, IMO).
Once again, it's the Patterns that really put OOP in context, and it's the Patterns that really show you how to be a good OO programmer.
Finally, I'd like to link to
Fowler's Books page, maybe someone will find something of interest.