interfaceって何のためにあるの?

以前、Javaでのシステム開発にたずさわったことがないSEにまとめてJava言語を教える、という業務を担当したことがありました。
そこで、もっとも多く出てきた疑問が「interfaceって何のためにあるの? 何がうれしいのかわからん」というものでした。当時は、十分に時間を取れないこともあり「classは多重継承できないから...」などと苦しい説明をしていましたが、それは実装の継承という側面しか見ていない説明ですね。「Javaで作成したプログラムはどう動くか」ということしか考えていないと、どうしてもこのへんの説明が苦しくなってしまいます。
本来であれば、「モジュールの閉鎖/開放原則」あたりから説き起こして、よいモジュールを設計するには「実装の継承」より「仕様(インターフェイス)の継承」の方に注目する必要があることを理解してもらわないといけなかったんですが。

今でもこのへんの説明をするときには、苦しいなあと思います。
まあ、デザインパターンの勉強をしたり、上手にinterfaceを使ったソースコードを読んだりしていけば、なんとなくわかってくるものだとは思うんですが。