I was wondering why most tokens inherit from an ERC20 interface, instead of just implementing all the functions directly. Are there are any problems that arise if the interface functions are just implemented directly?
When the developer makes a contract that inherits the interface, he/she is committing to implementing the functions defined in the interface. Failing to do so will result in undefined functions in the contract. Since that will not do, the contract will be rejected by the EVM.
From a quality assurance perspective, a refusal to deploy contract with an obvious oversight is exactly what you want.
Hope it helps.