class Animal { init<X: P2>(_ x: X) { } } class Cat: Animal { override init<X: P1>(_ x: X) { super.init(S2()) } }