protocol X {} protocol Y {} class A: X, Y { class func foo(x: A) { print(x) } } class B: A { override class func foo(x: X) { print(x) } override class func foo(x: Y) { print(x) } }