Seventy nine lines, ten of them code, and nearly every token on Ethereum claims to implement it. Read OpenZeppelin's IERC20 declaration by declaration and find out what a list of promises with nothing behind it is actually for.
The shortest important text in Ethereum, and you have been reading contracts that answer to it since your very first one. OpenZeppelin's IERC20. Seventy nine lines, of which ten are code, and six of those ten are functions.
Nearly every token you will ever open claims to implement this file. It contains no behaviour at all. That is not a gap in it. That is the entire point of it, and working out why is this checkpoint.
Two comments and a version, all familiar by now. Read line 4 again though. It sets a lowest acceptable compiler and names no highest one, where Ownable wrote a caret and stopped before the next series, and Uniswap's token pinned one exact release.
A file normally wants a ceiling because a later language could change the code underneath it. This file has almost nothing underneath it. There is no arithmetic, no storage and no body here to behave differently, so there is very little to break.
Function first: a declaration that lists the functions a contract must have, while saying nothing about how any of them work. The name: an interface. Line 9 opens one, and the documentation for the entire file is the single sentence above it.
You have met `contract`, and you have met `abstract contract`, which refused to deploy on its own. This is a third thing, and how it differs from abstract is worth deciding before you read on.