【Java】インターフェースの使い方をわかりやすく解説!【継承】
  • facebookページ
  • twitterページ
  • 2019.10.30

    【Java】インターフェースの使い方をわかりやすく解説!【継承】

    インターフェース(interface)とは?

    インターフェースとは、クラス内にあるメソッドの具体的な処理は書かずに「変数」または「メソッドの型」を記述したものです。

    以下の条件を満たす、抽象度が高い抽象をクラスをインターフェースとして扱うことができます。

    インターフェース使用の条件
    • すべてのメソッドが抽象メソッドであること
    • 基本的にフィールドを1つも持っていないこと

    メソッドについては、以下の記事で詳しく解説をしていますので参考にしてください。

    【関連記事】

    ▶︎【Java】 メソッドを徹底解説!定義から呼び出し、戻り値、引数まとめ

    インターフェースの宣言

    インターフェースは、以下のように宣言します。

    インターフェースの実装・使い方

    インターフェースを継承して子クラスを定義する際は「implements」を使用します。これを「インターフェースを実装する」と言うので覚えておきましょう。

    インターフェースを実装するための記述は、以下の通りです。

    インターフェースの宣言から実装までサンプルを使ってみていきましょう。

    実行結果↓

    このプログラムでは、NameインターフェースのcallメソッドをLinkクラスとCountクラスの両方で実装しています。

    実装の処理内容は決められていないので、LinkクラスとCountクラスでそれぞれ異なった動作をしているのです。

    Linkクラスでは、2つの文字列を組み合わせた文章を表示します。Countクラスでは、それぞれの文字の文字数を数えて表示します。

    このように、メソッドは用意するけど中身(処理)までは決めない場合にインターフェースは有効といえるでしょう。

    インターフェースのメリット・必要性は?

    インターフェースの宣言・実装はわかりましたが、なぜインターフェースが必要なのかメリットがわかりません…

    インターフェースは、大規模な開発など「将来的に変更が起こりうる場合」を想定して利用されます。インターフェースについてもう少し詳しくみていきましょう。

    インターフェースの最大の魅力は、「処理内容を具体的に書いていない」点です。使いたいときに処理内容を実装すればい良いので、将来的に処理の変更が起こりうる場合などに便利といえるでしょう。

    また、インターフェースは、「複数のインタフェースを同時に継承可能」というメリットもあります。

    クラスの継承の場合、親クラスを子クラスに継承する際は1つの親クラスしか指定できません。

    そのため、クラスの継承に対してインターフェースは複数継承できるのでひとつの利点だといえるのです。

    Javaの継承については、以下の記事を参考にしてみてください。

    【関連記事】

    ▶︎【Java】継承ってどう使えばいいの?基礎から徹底解説します【例あり】

    また、大規模なプログラムなど複数のインターフェースを利用する場合、長期的な目で見ると開発時間の短縮につながるでしょう。

    インターフェースのメリット・必要性
    • 使いたいときに処理内容を実装できる(処理内容を後回しにできる)
    • 複数のインタフェースを同時に継承できる
    • プログラムによっては開発時間の短縮になる

    インターフェースと抽象クラスはどう使い分ける?

    インターフェースと抽象クラスは、似ている部分の多いですがしっかりとした違いがあります。

    インターフェースと抽象クラスの違い
    • 抽象クラスは多重継承不可、インターフェースは複数実装可能
    • インターフェースのアクセス修飾子は「public」のみ
    • インターフェースは定義できるメンバに制限あり、抽象クラスはなし

    順番にもう少し詳しくみていきましょう。

    抽象クラスは多重継承不可、インターフェースは複数実装可能

    インターフェースが複数のインタフェースを同時に継承可能というのは、先ほどご説明した通りです。抽象クラスは1つの親クラスしか指定できません。

    インターフェースを複数実装したプログラムのサンプルをご紹介します。

    実行結果↓

    MessageクラスでStartとCallの2つのインターフェースを実装し、Messageクラスで変数name1とname2を利用できているのがわかります。このように、インターフェースは複数実装することが可能です。

    インターフェースのアクセス修飾子は「public」のみ

    インターフェースは、他のクラスに実装することを前提に作られているので、指定できるアクセス修飾子はpublicのみです。

    publicを付けない場合は、同じファイル内のみの利用に制限されるので覚えておきましょう。

    インターフェースは定義できるメンバに制限あり、抽象クラスはなし

    インターフェースで定義できるメンバは、

    • 抽象メソッド
    • defaultメソッド
    • クラス定数

    に限られています。一方、抽象クラスには制限がありません。抽象クラスにabstractメソッドがあれば、そのクラスは抽象クラスになるだけです。

    まとめ

    インターフェースは、処理内容を具体的に書いていないため処理内容を変えたい場合に有効な手段です。

    また、クラスの継承とは異なり複数のインタフェースを同時に継承できるといったメリットもあります。

    ぜひ、インターフェイスを有効活用してプログラムを実装してみてください。



    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE