Summary:
- Private: no one can see it except for within the class
- Protected: Private + derived classes can see it
- Public: the world can see it
When inheriting, you can (in some languages) change the protection type of a data member in certain direction, e.g. from protected to public.