注目記事

【Javaコード入門】継承、インターフェイス_③implementsキーワード

インターフェイスを実装する – implementsキーワード

[modifier] class name implements iname,… {
 definition
}
 modifier:修飾子
 name:クラス名
 iname:インターフェイス名
 definition:メンバーの定義

インターフェイスを継承してクラスを定義することを「インターフェイスを実装する」と言います。実装には、クラスを定義する際にimplementsキーワードを付けて実装元を指定します。
たとえば以下はAreableインターフェイスを実装して、Triangleクラスを定義する例です。実装では、インターフェイスで定義されたメソッドをすべて実装していないと、コンパイルエラーとなります。

Triangle.java

  1. package com.example.mynavi.object;
  2.  
  3. public class Triangle implements IAreable {
  4.   double base;
  5.   double height;
  6.    
  7.   public Triangle(double base, double height) {
  8.     this.base = base;
  9.     this.height = height;
  10.   }
  11.  
  12.   @Override
  13.   public double getArea() {
  14.     return base * height / 2;
  15.   }
  16. }

インターフェイスはクラスと違って、いわゆる多重継承が可能です。もしも複数のインターフェイスを同時に実装するならば、以下のようにカンマ区切りで列記します。

  1. public class Triangle implements IAreable, Serializable { ... }

デフォルトメソッド

Java 7以前では、インターフェイスで実装を持つことはできませんでした。しかし、Java 8ではデフォルトメソッド、staticメソッドをインターフェイスで定義できるようになりました(staticメソッドについては、static修飾子を参照してください)。
デフォルトメソッドは、実装クラスの側で明示的に実装されなかった場合に、既定で適用されるメソッドのことです。
例えば以下は、AreableインターフェイスのgetAreaメソッドにデフォルトの実装を定義する例です。

Areable.java

  1. public interface Areable {
  2.   default double getArea() {
  3.     return 0.0;
  4.   }
  5. }

デフォルトメソッドは、メソッド定義の頭にdefault修飾子を付与してください。
これで、実装クラスの側でgetAreaメソッドが定義されなかった場合は、インターフェイス側で定義されたデフォルトメソッドが呼び出されるようになります。

 

デフォルトメソッドに加えて、staticメソッド(Java 8以降)、privateメソッド(Java 9以降)をインターフェイスで定義できるようになりました。privateメソッドは、主にデフォルトメソッドやstaticメソッドから共通して利用することを想定したものです。

継承、インターフェイス_目次
extendsキーワード
interface命令
implementsキーワード
無名クラスを定義する
ラムダ式を利用する

監修

山田祥寛(有限会社 WINGSプロジェクト)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NEC にてシステム企画業務に携わるが、2003年 4 月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト(https://wings.msn.to/)」の代表でもある。主な著書に『改訂 3 版JavaScript 本格入門』(技術評論社)、「独習シリーズ(C#・Python・PHP・Ruby・JSP&サーブレットなど)」(翔泳社)、「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravel など)」(Amazon Kindle)など。売り上げの累計は100万部を超える。