Yikes. This C# article makes an interesting point about gradually-typed and type-inferencing programming languages that hadn’t occurred to me before. If you trust your compiler to figure out types automatically from context, then adding new methods to a class can change that compile-time calculation.
In Java, where there is no automatic type inference, it’s common knowledge that adding a new non-overloaded method to a class is safe. So I hadn’t seen this context-sensitive compilation problem in a “static” language before. Dynamic (that is, runtime-typed) languages don’t have this problem either because the compiler makes no assumptions about the types and defers method binding to the last possible moment.
http://blogs.msdn.com/b/ericlippert/archive/2012/01/09/every-public-change-is-a-breaking-change.aspx