可変引数の不思議

可変引数は基本的には配列だけど、

interface Hoge {
    void hoge(String[] args);
    void piyo(String...args);
}

class HogeImpl implements Hoge {
    public void hoge(String...args) {}
    public void piyo(String[] args) {}
}

こんな感じのことが可能らしい。
ちなみに、HogeImpl型の変数を介してはhogeメソッドのみ、Hoge型の変数を介してはpiyoメソッドのみが可変引数を受け取ることが出来る。

HogeImpl h1 = new HogeImpl();
h1.hoge("hoge", "piyo", "foo", "bar");
// これはコンパイルエラー
//h1.piyo("hoge", "piyo", "foo", "bar");

Hoge h2 = h1;
// これはコンパイルエラー
//h2.hoge("hoge", "piyo", "foo", "bar");
h2.piyo("hoge", "piyo", "foo", "bar");

これを使うと、引数の最後が配列であるメソッドをオーバーライドして、可変引数のメソッドとして使える!
・・・ただ、より具体的なクラスが必要だから使う機会はないだろうなぁ。