インタフェース型の暗黙的なメンバ

インタフェース型のメンバには,Objectクラスのすべてのメソッドと同じシグネチャを持つ,public abstractを指定したインスタンスメソッドが暗黙的に宣言される.
だから,

public class Test {
    public static final void main(String[] args){
        List l = new ArrayList();
       //コンパイルエラーには,ならない.
       String hoge =  ((Hogerable)(l)).toString() ;
        System.out.println(hoge + " End.");
    }
}
interface Hogerable {
}

HogerableにキャストされたlがtoString()メソッドを持てるのは,この理由である*1とか.ただし,この場合実行時にクラスキャスト例外が生じる.もちろん,HogerableとListを実装するクラスを,lに代入していたら,何の問題もなくプログラムは終了する. 言われてみると ,普通に使っている気がするな.

    List l = new ArrayList();
    l.toString()

とかで,Listインタフェースには,どこにもtoString()メソッドなんていうメンバはないし,Listのスーパーインタフェースでも同様.であるのに,こういうメソッド呼び出しがコンパイル通るのは,この理由だったか

っていうか,Hogerableって語呂が気に入ったが使っている人は少ないようだ.

*1:つまり,Listクラスのメソッドであるadd(object)とかは持てない