Answers at least the C # / Java part, as I don't know very well in C ++.
However, depending on their declared accessibility, inherited members may not be available in the derived class.
The C # spec seems a bit more meaningful, although Java handles private mailboxes the same way. Private members of the base class also exist in Java (however, they are not inherited; see, are private fields inherited in Java? ). Since you cannot access them, it is still not useful. Of course, internal elements are initialized by setting private members. So the instances of your derived class, of course, have all the private members of the base class, inheritance, however, means any kind of polymorphism, which implies that you can override (if your member is not static or final/selead ), has nothing to do to private members.
Thus, in pursuit, there should be no need to access the internal elements at all, neither in C #, nor in Java, or anywhere else. Just suppose your derived instances fully initialize all the underlying elements and do your actual work.
Regarding what you call the βOOP theory,β I doubt that there is a cleaner answer than for this principle (which is implemented differently in these languages). Private members have nothing to do at all, OOP just processes interactions between objects, surrounding them not with their actual internal elements.
source share