Imagine that the public, protected and private were enumerated values, with public=1, protected=2, and private=3;
Then for each member of the base class, it's access specifier in the derived class would be max(inheritance_access_specifier, base_class_access_specifier)
So, if the inheritance acces level is private, everything is private. If it's protected, everything is protected or stricter, and if it's public, everything is as it was in the base class.