Why are ethereum addresses hashes of public keys?

Externally owned accounts: No issue using public key directly.

Design choice for parity between externally owned and internal accounts (contracts).

Contracts are not linked to private keys, contract address is calculated from:

hash of creating address, transaction nonce.

Naive case: replace with hash of public key and nonce, in the case where a contract is created from another contract, there is not public key.

Reference

https://ethereum.stackexchange.com/questions/57151/why-are-ethereum-addresses-hashes-of-public-keys?rq=1