When calling a private contract method, inside the method call the contract should be able to communicate to both private and public state.
In the event that a contract exists at the same address in the private state and the public state, the private state takes precedence.
A private contract method call that makes an internal message call to a public contract cannot mutate the public state. i.e. you can only call view/pure methods.