protocol P1 {} protocol P2 : P1 {} class Animal { func f<X: P2>(_ x: X) {} } class Cat: Animal { override func f<X: P1>(_ x: X) {} }