A language does not need to have interfaces to have interfaces. An interface is simply a set of methods and the contracts those methods obey. An object can be said to implement an interface if it has the methods that obey the required contracts. Interfaces are entirely about decoupling. Such that the client of an interface depends on the contract of that interface and not any object that implements it.
The SRP in SOLID is about factoring interfaces such that each client ends up with interfaces that are specific to its use of the object rather than depending on an interface that provides more than is needed. That is the interface is responsible to a single client.
The example for SRP that is given is an interface that combines two distinct uses. By splitting those interfaces, the code that results is more flexible even if there is only one object that implements both interfaces.
Neither of those SRP mentioned in that article are the specific SRP that appears in SOLID. Nothing wrong with that. Please cite Clean Code or that article, rather than SOLID, for them.