Puryści powiedzą, że dziedziczenie osłabia hermetyzację. Ja powiem, że to jest zależne. Jeżeli dziedziczysz po którejś klasie, to wszystkie metody protected (i pola) są dostępne w klasie potomnej.
Co innego, gdy klasa nadrzędna ma wszystko na public - to jest łamanie hermetyzacji.
Fakt że inna klasa korzysta z obiektów jakiejś klasy jest w pewnym sensie łamaniem enkapsulacji. Wyobraź sobie, że jedziesz sobie samochodem i wcinasz swoją ulubioną kanapkę z serem. Masz otwarte okno kierowcy. Nagle podjeżdża jakiś inny samochód, ktoś wyciąga łapę i zabiera ci kanapkę sprzed nosa. Klasy powinny być hermetyczne i powinny mieć jednak ściśle określone formy dostępu. Przy dziedziczeniu, jeżeli programista jest niedoświadczony, można dość prosto udostępnić pola i metody, które w zamyśle nie powinny być dostępne z innego miejsca.
Ogólnie zalecane jest wykorzystywanie polimorfizmu zamiast dziedziczenia.