public: Accessible from anywhere (internally, externally, and by derived contracts)
private: Only accessible within the same contract
internal: Accessible within the same contract and derived contracts
external: Only accessible from outside the contract (not internally)
contract VisibilityExample {
uint256 public publicVar; // Auto-generates getter
uint256 private privateVar; // Only this contract
uint256 internal internalVar; // This contract + derived
function externalFunc() external {} // Only external calls
function publicFunc() public {} // Internal + external calls
function internalFunc() internal {} // This contract + derived
function privateFunc() private {} // Only this contract
}
Rewriting in plainer words…
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.