In C#, there is this great language feature called \"explicit interface implementations\" that allows you to implement two or more interfaces where the names of the interfac
Protocol extensions basically already do what you're describing:
protocol Cat { } extension Cat { func quack() { print("meow") } } class Duck : Cat { func quack() { print("quack") } } let d = Duck() d.quack() // quack (d as Cat).quack() // meow