so you mean that solidity imposes that each override specifies all the overridden classes? and since ERC721 is ERC165 & ERC165 is IERC165, one has to write both ERC165 and IERC165 ? I am a bit surprised because it means then that you have to know what is inside any contract you inherit from.
Also, this IERC165 is not imported in the contract but I guess available at compile time because ERC165 is imported, which in turn imports it.
On the other hand, why not then contract ERC721 is Context, ERC165, IERC165, IERC721, IERC721Metadata { which would then make clearer the fact that the interface is enforced and maybe already fulfilled by ERC165?
I have never done any proposal yet but if you feel like there is something (I am also rather new to solidity), I would be happy to help / to try to write down something.