A deep dive into the world of object-oriented programming, using Java as the vehicle for this journey.
The book is generally designed to be supplemented with the presence of a tutor, but it is still entirely possible to make use of around 90% of the material if the subject is self-studied. The only thing lacking is directed solutions for the activities, which, if I’m not mistaken, are only available for tutors.
There are also various sections about functional programming.
This book won’t make you a competent Java programmer but it will still give you a deep understanding of the core concepts —often tricker parts— of the language, namely object-orientation and particularly inheritance.
Inheritance features heavily, with 3 entire chapters dedicated to it. It’s the most substantial topic in the book and rightly so. Approaching inheritance and choosing the right abstraction construct requires some thought and some practice, and these three chapters towards the end walk you through that in a gentle manner so you come out with a proper foundation. You’ll learn how to use subclasses, superclasses, abstract classes and methods, interfaces, subtyping, method dispatch and polymorphism, among other inheritance concepts.
Is Java the best language to learn today? I can’t tell. But I can say that it’s a great language to grasp the idea, concepts and techniques of object-oriented programming (OOP). And this book has made a great use of that, with its clear writing style and slow yet deep exploration of the subject.