プログラミング Java

【Java入門】インターフェースの使い方まとめ

投稿日:

概要

インターフェースとは、内部実装を知る必要なく、利用する機能の接点のみを提供する仕組みです。

接点をソフトウェア的にいうと、メソッドのシグネチャと戻り値の型に当たります。
つまり、どんなメソッドにこういう値を渡せばこの型でデータが返ってくるよというのが定義されたものがインターフェースです。
  

基本構成

変数、メソッドを持つことができます。

変数

public かつ static かつ final(外部から参照可能かつ変更不可)なものだけを定義できます。

メソッド

アクセス修飾子はpublic または privateが指定可能です。
省略した場合、暗黙的にpublicとして扱われます。

privateメソッドは具象メソッドとして利用します。(Java9から利用可能になりました)
これはインターフェースの内部実装として利用するためで、実装先では扱えないものです。

abstractはつけなくても暗黙的に抽象メソッドとして扱われるので省略可能です。
default と staticは具象メソッドとして扱います。
(defaultはJava8から利用可能になりました)

コード例

 

defaultメソッド

前述のとおりですが、Java8から利用可能になった修飾子で、具象メソッドを実装するために指定します
 

多重継承

インターフェースは複数の実装(implements)を持たせることができます。

 

オーバーライド

インターフェースは基本的にメソッド名と戻り値のみを提供するだけなので、実装先のクラスで具象メソッドを実装する必要があります。
その場合、@Overrideアノテーションをつけてオーバーライドを明示します。
また、オーバーライドしないとコンパイルエラーになるため、実装の強制による実装漏れを防げるというメリットがあります。
 

ポリモーフィズム

インターフェースの機能を最大限に活用するにはポリモーフィズムの理解が不可欠です。
ポリモーフィズムとは、インスタンスに基づいた振る舞いをさせる仕組みです。

もしポリモーフィズムを使わなければ、if文をたくさん書くことになります。
ホテルの料金計算を例に簡単なコードで見ていきたいと思います。

インターフェースと各金額クラス

Mainメソッド

単純な例なのでメリットがわからないかもしれません。
そこで、次のような想定を検討してみます。
・新たな料金体系に変更することなったら?
・子供料金だけ、キャンペーンを適用することになったら?
・料金判定が色んな箇所でコーディングされており、すべての箇所を修正することになったら?

もしif文で書いていたら、すべての箇所の修正とテストを行わなければなりません。
でもポリモーフィズムを活用していたら、特定のクラスまたはインターフェースの修正で済みます。
場合によってはif文と変わらないテスト工数がかかるかもしれませんが、コードの修正コストは格段に少なく、また安全です。

他の例を参照したい場合、以下もご確認下さい。
映画のレイティング判定をStateパターンで実装する

まとめ

  • インターフェースにはpublic かつ static かつ finalな変数を持つことができる。
  • メソッドは暗黙的に、publicかつabstractとして扱われる。
  • defaultメソッドは具象メソッドとして実装する。
  • インターフェースは多重継承が可能である。
  • 実装先クラスに抽象メソッドの実装を強制させることで、実装漏れを防ぐことができる。
  • ポリモーフィズムによって、保守しやすいコードを書くことができる。

 
最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!
もし内容が良かったらランキング評価を頂けると励みになります(^^)

ランキング評価する

-プログラミング, Java
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


関連記事

メソッドを切り出すメリット。リーダブルなコードで行こう!

概要 大きなクラス、長いメソッドを書いたり読んだりしていて、ロジックが追えなくなってきています。 私の周りではすごく理解が良く、長い処理でも追っていける人がいますが私はそうではありません。 私はごくご …

Springでバリデーションがimportされていないときの対処法

状況 SpringF/Wでバリデーションを実装したいが、@NotNullや@Minといったアノテーションが使えない。 @NotNullを使おうとすると、import com.sun.istack.No …

【Java】ポートフォリオ例(高配当株分析ツール)

概要 ポートフォリオにスクレイピングツールが良いと以前の記事でご紹介しました。 どんなものが作れるのか? ということの具体例として、私が作成したスクレイピングツールを紹介します。 仕様 スクレイピング …

【Java入門】Functionの使い方まとめ

概要 Function <T, R> apply(T)を関数メソッドに持つ関数型インタフェースです。 1つの引数を受け取って結果(R)を返します。   基本的な使い方 Functionイン …

【Spring】バリデーション時に、入力値を保持する方法

登録画面で「登録」ボタンを押した後、 バリデーションで引っ掛かってエラーになっても 入力内容を画面に保持して置く方法についてです。 テンプレートエンジンは、Tymeleafを使用しています。 方法とし …

記事を探す

SpringFramworkの良書

■おすすめ教材
Javaの基本を学んだ人が、次のステップとして読む本(中級者向け)

※SpringはJavaのFrameworkの1つです。
変更のしやすさ、保守性の高さが特徴です。

サイト内検索