私の知る限り、Groovy には既に mixin があり、Scala には trait があります。C ファミリーには多重継承があります。では、なぜ Java の新しい機能が「拡張メソッド」と呼ばれるのでしょうか。同じものの名前が違うだけなのか、それとも別の理由があったのか。トレイトやミックスインとの違いは何ですか? 彼らは何を追加し、何を欠いているのでしょうか?
個人的には、それらを「拡張メソッド」というよりも「実装メソッド」と見なしています。
では、なぜ Java の新しい機能が「拡張メソッド」と呼ばれるのでしょうか。
私の知る限り、この命名はC#に由来します。仮想拡張メソッドはメソッド専用ですが、ミックスインとトレイトはフィールドにも適用されます。
仮想拡張メソッドによるインターフェイスの進化 注: ブライアン自身はそれらを「Defender メソッド」と呼んでいますが、「仮想拡張メソッド」の方が広く認識されていると思います。
JVM 言語サミット 2011 - Brian Goetz氏がなぜそのような名前になったのかについて彼が話しているのは間違いありません。