KEIS BLOGは株式会社ケイズ・ソフトウェアが運営しています。

KEIS BLOG

java8 デフォルトメソッド


こんにちは!javadaytokyo2014に行ってきた山田(@nii_yan)です。
javaノートゲットです!かっこいいでしょ~

【5】java_note

最近は、PerlやRubyばっかり触っていてLL最高!Interface?何それおいしいの?って思ってたんですが、久々にjava触ると面白いですね!
javadaytokyoでjava8の新機能色々聞いて、次の開発はjavaでやりたくなりした。

さて、今日は聞いてきた話の中でdefault methodsについて触れてみたいと思います!

default methodsとはなんぞやというと、Interfaceクラスで関数の前にdefaultとつけるとなんと実装が書けるようになりました!
こんな感じ

public interface HogeInterface {   
    void hello();
    default void say(String str) {
        System.out.println("Hoge " + str);
    }
}

Interfaceに実装を書いても、もちろんオーバーライド出来ます。
なので、defaultの動きは決めといて、違う動きしたい時はオーバーライドしてって事が出来るようになりました。

え?これって抽象クラスと一緒じゃないの??って思ったあなた。
とっても鋭いです!

実は抽象クラスと決定的な違いは多重継承(のようなもの)が出来るようになったのです!

たとえばHogeInterfaceの他にMogeInterfaceを作ってみましょう

public interface MogeInterface {
    void hello();
    default void say(String str) {
        System.out.println("Moge " + str);
    }
}

そして、HogeとMogeの実装するクラスを以下のように作る事が出来ます。

public class HogeMogeImpl implements HogeInterface,MogeInterface {
    @Override
    public void hello() {
        System.out.println("I am HogeMoge");
    }
    
    @Override
    public void say(String str) {
        HogeInterface.super.say(str);
    }
}

実装のないhelloメソッドについては実装を記述し、sayメソッドについてはどちらのクラスのメソッドを呼ぶか記述することが出来るようになりました。

実際にこのクラスを呼んでみると

        HogeMogeImpl hogemoge = new HogeMogeImpl();
        hogemoge.say("hogemoge test");

きちんとHogeInterfaceのsayメソッドが呼ばれているのがわかると思います。

 Hoge hogemoge test

java8ではdefault methodsのほかにもstreamAPIとか、メソッド参照とか、もちろんlambda式とかとても面白そうな機能満載です!

是非是非みなさんjava8に触れてみてください。

javadaytokyo2014で発表された資料は以下のリンクから見る事が出来ます。
http://www.oracle.com/us/dm/seo100304328-jp-jp-lw-ipi1-ev-2196625-ja.html