Why does extending two ERC721 "extensions" contracts require overriding?

This is my first time creating a dApp, so bare with me please. I'm using OpenZeppelin, but from what I've been reading on other forum posts most of the functionalities that the old ERC721 extendable contract provided have now been removed by default.

I've been digging through the imported contracts and I can see that most of the functionalities I'm looking for (setTokenUri, totalSupply, etc) are in the ERC721Enumerable and the ERC721URIStorage contracts, so I was attempting to extend them to my contract alongside Ownable and I noticed that if I extend either the ERC721Enum or the ERC721URI separately, I don't have any problems. But together, it requires overriding four different functions. Why is that the case? Am I doing something wrong?

Thank you.