インターフェイスを実装する – implementsキーワード
[modifier] class name implements iname,… {
definition
}
modifier:修飾子
name:クラス名
iname:インターフェイス名
definition:メンバーの定義
インターフェイスを継承してクラスを定義することを「インターフェイスを実装する」と言います。実装には、クラスを定義する際にimplementsキーワードを付けて実装元を指定します。
たとえば以下はAreableインターフェイスを実装して、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 { ... }
デフォルトメソッド
Java 7以前では、インターフェイスで実装を持つことはできませんでした。しかし、Java 8ではデフォルトメソッド、staticメソッドをインターフェイスで定義できるようになりました(staticメソッドについては、static修飾子を参照してください)。
デフォルトメソッドは、実装クラスの側で明示的に実装されなかった場合に、既定で適用されるメソッドのことです。
例えば以下は、AreableインターフェイスのgetAreaメソッドにデフォルトの実装を定義する例です。
Areable.java
- public interface Areable {
- default double getArea() {
- return 0.0;
- }
- }
デフォルトメソッドは、メソッド定義の頭にdefault修飾子を付与してください。
これで、実装クラスの側でgetAreaメソッドが定義されなかった場合は、インターフェイス側で定義されたデフォルトメソッドが呼び出されるようになります。
デフォルトメソッドに加えて、staticメソッド(Java 8以降)、privateメソッド(Java 9以降)をインターフェイスで定義できるようになりました。privateメソッドは、主にデフォルトメソッドやstaticメソッドから共通して利用することを想定したものです。
監修