Na objektové myšlení bych nepořizoval učebnici Javy, ale učebnici OOP. Ty principy jsou obecné a pak jen stačí si to aktualizovat pro konkrétní jazyk.
1. Přidávám se k už napsaným názorům, že jedna věc je nenaučit se to (a naučit se to později) a druhá věc je naučit se to blbě. Na to pozor. S úsečkou, která dědí z bodu jsem se skutečně také setkal, ale nevím jestli zrovna v Heroutovi. Už je to hodně let, co jsem ho četl a teď jsem jen rychle proskenoval pdf.
2. Ad Herout: Shrnul bych svůj pocit výrazem "so-so". Samotnou syntax javy popisuje dobře (byť je to "předosmičková" éra). Asi by se dalo polemizovat o tom, jestli je kvádr obdélník ("is-a" vztah) - viz kap. 11. Jestli může kvádr zastoupit objekt v místě, kde je požadován obdélník. Nicméně, možná mám nějaké aktualizované vydání, ale zaprvé Herout spíše zdůrazňuje kompozici (a věnuje se ji i dřív než inheritanci) a na úvod kapitoly o dědičnosti zdůrazňuje princip is-a vs has-a, což je správně. Nepřijde mi to úplně špatně, metodicky na to jde správně a pak to kontruje tím příkladem, kdy z obdélníka dědí kvádr

aby v zápětí hned upozornil (píše "byl jsem upozorněn při korektuře"), že to tak nejspíš není optimální návrh. Že varianta "kvádr MÁ šest stěn co jsou obdélníky" je možná příhodnější. Možná (nejspíš) mám nějaké aktualizované vydání.
Pak tam vidím ve cvičení nějaký příklad s kolem (předek, ve kterém má být boolean proměnná "máPřehazovačku") a horským kolem (speciální případ kola, který má navíc proměnné převodyVpředu, převodyVzadu a máPřehazovačku nastavuje na true). Tak nevím, tohle na mne působí trochu divně. Já bych to pojmul jinak. MáPřehazovačku je interface, a objekt, který o sobě říká že MáPřehazovačku musí umět vrátit objekt Přehazovačka. Převody vepředu a vzadu pak nejsou vlastností přímo kola, ale té Přehazovačky. Koneckonců, co je kolu do toho ,jak je uvnitř poskládaná ta přehazovačka

Co mne tam přijde divné je ten boolean "máPřehazovačku" v předkovi a na mne působí jako nějaký leak pozdější, speciální implementace. To pak budu do rodiče dávat proměnné "máGalusky", "máBaterii" atd.? Divné. Vlastně příklady na dědičnost v té učebnici fakt působí "šroubovaně".
2. Souhlasím s tím, co píše Filip J., co se týká reálných java programů (alespoň těch "běžných podnikových"), tam je OOP v hodně ořezané aplikaci a skoro je to dobře. DI frameworky přímo vybízejí ke skládání objektů. Pokud se v těchto aplikacích použije dědičnost tak spíš jako nástroj pro sdílení nějaké společné implementace, což je otázka, jestli je vždy dobře. A pokud se vývojář okouzlený možností dědit utrhne ze řetězu a začne dědičnost zavádět do entit, servis, api endpointů atd. tak to často smrdí průšvihem.
Mimochodem se mi líbí, jak to má Go, ale to už jsme hodně offtopic.
3. Také souhlas, že se java dělí na "předosmičkovou" a "osmičkovou" a žádná z dalších věcí už nepřinesla tak významnou revoluci (ruku na srdce, snad každý z profi vývojářů javy používá "lambdy" ale kdo z patra vyjmenuje fíčury verzí 10, 12... a používá je). "předosmičková" java je pravěk, ale pořád je to základ, na kterém je ta "osmičková" postavená, takže se člověk neučí nic špatně a jen si pak dostuduje nadstavbu.