プログラミング応用a 第14回 『インタフェイス(interface )2』 -02〜defaultメソッド |
【defaultメソッド】
■「やっぱり interface にも最初から実装を持ったメソッドを定義できたら便利なこともあるよね...」
前回,「interface は純粋にインタフェイス成分しか含まない擬似的クラスである」と説明した。
そして,
この interface が導入されたのは,実装の衝突を回避しつつ多重継承を実質的に実現するためであった。
ところが,Java言語を作った サンマイクロシステムズ社がオラクル社に吸収合併され,Java言語の哲学にも変化が
現れた。
特に,interfaceに関して,
「interface にも,最初から実装を持ったメソッドが定義できたら便利なときがあるぞ」
という考えが採用された。この,メソッドが「最初から持っている実装」を「デフォルト(既存)の実装」と呼び,
interface にデフォルトの実装を持たせたメソッド(defaultメソッド)を定義できるようになった(2014年の Java 1.8 (Java SE8)より)。
以下,宇田川先生による解説資料
※上図の②は,抽象メソッドのこと
【defaultメソッドの実装が衝突したらどうするのか?】
当然ながら,前回説明したように,defaultメソッドの実装部分は,継承・実装の際に衝突する可能性が出てくる。
そこで, default メソッドが導入された Java 1.8 以降では,
継承・実装の際に,メソッドの実装が衝突した場合は,
継承・実装する側(サブクラス・サブインタフェイス側)でそのメソッドをオーバライドしなければならない
ことになった。
上図のソースコード例: Printable.java