Rust is the language I'm thinking of right now. If you declare a trait (what Rust calls interfaces), you can also implement that trait on any type.
The basic rule is you can implement a trait on a type if you declared either the trait or the type yourself. You just can't implement someone else's trait on someone else's type.
But Obj-C also allows for the same thing. You can declare @protocol (interface) conformance in a class category, and you can declare your own category on someone else's type.