implementsキーワード
インターフェイスを実装する – implementsキーワード- [modifier] class name implemets iname,… {
- definition
- }
- modifier:修飾子
- name:クラス名
- iname:インターフェイス名
- definition:メンバーの定義
インターフェイスを継承してクラスを定義することを「インターフェイスを実装する」と言います。実装には、クラスを定義する際にimplememntsキーワードを付けて実装元を指定します。
たとえば以下はIAreableインターフェイスを実装して、Triangleクラスを定義する例です。実装では、インターフェイスで定義されたメソッドをすべて実装していないと、コンパイルエラーとなります。
Triangle.java
package com.example.mynavi.object; public class Triangle implements IAreable { double base; double height; public Triangle(double base, double height) { this.base = base; this.height = height; } @Override public double getArea() { return base * height / 2; } }
インターフェイスはクラスと違って、いわゆる多重継承が可能です。もしも複数のインターフェイスを同時に実装するならば、以下のようにカンマ区切りで列記します。
public class Triangle implements IAreable, Serializable { ... }
JavaSE 7以前では、インターフェイスで実装を持つことはできませんでした。しかし、JavaSE 8ではデフォルトメソッド、staticメソッドをインターフェイスで定義できるようになりました(staticメソッドについては、static修飾子を参照してください)。
デフォルトメソッドは、実装クラスの側で明示的に実装されなかった場合に、既定で適用されるメソッドのことです。
例えば以下は、IAreableインターフェイスのgetAreaメソッドにデフォルトの実装を定義する例です。
IAreable.java
public interface IAreable { default double getArea() { return 0.0; } }
デフォルトメソッドは、メソッド定義の頭にdefault修飾子を付与してください。
これで、実装クラスの側でgetAreaメソッドが定義されなかった場合は、インターフェイス側で定義されたデフォルトメソッドが呼び出されるようになります。