The recently recently technical guidelines include this statement:
2.7. All non-public properties and methods SHOULD be private.
Can somebody from Magento clarify why this is the case?
I'm concerned about the implications if this ends up being applied consistently. While plugins and other forms of overrides are ideal when possible, there are cases where core functionality needs to be overridden, and there is no way to do it other than to overload the class using a di.xml <preference> (for example, when the functionality is in a non-public method). In these cases, it seems the best approach is to inherit from the original class so that you can avoid repeating parts of the code you aren't aiming to change. By making class members private, however, it is impossible to do this.
If the Magento core team sticks to this "private" rule, what is the recommendation for overriding classes in these cases? Copypasta seems to be the only solution, but that seems like a regression from Magento 1, not a step forward.