Wiem że mnie nikt nie pytał, ale ja tam jestem za tym żeby w ogóle nie dało się dziedziczyć a zamiast tego tylko implementować interfejsy. Takie sprytne wpinanie się w jakąś bibliotekę/framework i podmienianie ich wnętrzności już widziałem i skończyło się to tym że nie mogliśmy ich później zaktualizować - a bez tego nie mogliśmy podbić wersji javy itd.
Bo ktoś uznał, że to nie jest zewnętrzny interface rozwiązania. Tylko zapomnieli dodać final. Ryzyko wiąże się nie tylko z tym, że będzie ciężko zrobić upgrade. Gorzej, że możesz niechcący zmienić sposób działania klasy, po której dziedziczysz.
Pewnie że to skrajna opinia, ale zdecydowanie zbyt często dziedziczymy i założenie że programiści dziedziczą i robią tak żeby było dobrze jest wg. mnie naiwne bo w 90% przypadków nie wiedzą albo i nawet się nie zastanawiają nad tym co robią.
Co to znaczy "zdecydowanie zbyt często"? Ja nie pamiętam kiedy faktycznie coś tam dziedziczyłem, ale też piszę coraz mniej "obiektowo".
Scope pakietowy może pomóc itd, ale co z modułami? Java 9 już jest z nami jakiś czas i w sumie to nie widziałem żeby ktoś tego używał a mam wrażenie że mogłyby kilka problemów rozwiązywać.
Ile widziałeś intencjonalnych przypadków użycia dostępu pakietowego? I jeszcze takiego, żeby faktycznie to coś robiło, a nie tylko gasiło ostrzeżenie lintera. A Java 9 może jest stara, ale wciąż sporo jest projektów na J8. No i dlaczego ktoś, kto nie rozumie podziału projektu na jednostki miałby się przejmować stosowaniem modułów, skoro wprowadzają one dodatkowe upierdliwości do projektu?