トピックでは、その最たるものを語っています。静的メソッドをインターフェイスで宣言できない理由は何でしょうか。
public interface ITest {
public static String test();
}
上記のコードでは、(少なくともEclipseでは)次のようなエラーが発生しました: "インターフェースメソッドの不正な修飾子 ITest.test(); only public & abstract are permitted".
インターフェイスの中に静的メソッドを持つことができない理由は、Javaが静的参照を解決する方法にあります。Javaは、静的メソッドを実行しようとするときに、わざわざクラスのインスタンスを 探すことはありません。これは、静的メソッドはインスタンスに依存しないため、クラスファイルから直接実行することができるからです。インターフェイスのすべてのメソッドが抽象的であることを考えると、VMは静的メソッドの背後にあるコードを見つけ、それを実行できるようにするために、インターフェイスの特定の実装を探す必要があるのでしょう。これは、静的メソッドの解決方法と矛盾しており、言語に矛盾をもたらすことになります。