Consider:
class A { void fun(int) {} }
class B : A { void fun(int x) in { assert(x > 0); } body {} }
In this case B's in contract is never called. The compiler should disallow the code. To make the code work, an empty "in" contract on A.fun should suffice. The error message should mention that.