The first book I’ve read about Java, one of the first books I’ve read about computer science.
This book provides a very good introduction about object-oriented programming (OOP). The title ‘thinking’ really means to make you follow Java’s class/object model of code organization. As a ‘pure’ and successful OOP language, Java is explained to great depth through various OOP concepts.
The most memorable part is the discussion about inner class. Leading from an issue about multiple inheritance, the author presented the dilemma between clean code organization and convenient reuse. Author then compares the benefits and downsides of multiple inheritance in the C++ way (from a modern view, one can also include mixin/trait). The book presented the Java design decision very well in this topic that continued to be helpful until I meet various other OO concepts and solutions.
A essential book if you’re starting to learn Java, it can also be useful if you are looking for object-oriented programming alone.