Types are meant to be used. Use implies users, and access protection rules allow to specify the conditions of the use.
Together with assertions, friendship allows for interface dedication, and for enforcing protocols along which typed objects can be accessed.
Access protection rules allow to declare simple assertions that can be checked by the compiler.