プログラミング 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


関連記事

【Java】モジュールシステムの概要と実装例

概要 Javaのモジュールシステムについて、概念的なイメージと実際のコード例で理解を深めるための記事です。 読者はJava Silverの資格勉強中の方やJava入門者を想定しています。 内容は以下の …

【SpringBoot入門】#4~ headerの作成と埋め込み

概要 全ての画面で使用するヘッダーを作成します。 そして、Index画面に埋め込むところまでを行います。 共通ヘッダーの作成

・&lt …

no image

画面にonclickを書かずにイベントを発生させる方法

画面にonclickを記述すると、JavaScript側で関数名が変更になった際の修正が面倒になる。 なのでonclickを記述せずにイベントを発生させるように記述することが望ましいと子ドレビューで指 …

【Java】オブジェクト指向の練習題材(会員オブジェクト)

前回記事、オブジェクト指向とは何なのかを簡単に説明してみるの練習題材です。   仕様 以下の会員クラスを作成し、Mainクラスで表示する。 会員クラスには、「会員」という単位で持つことできる …

Springメモ(あれ、どうすんだっけ?)

@Autowiredアノテーションをつけることができる箇所(3つ) ・フィールド変数 ・コンストラクタの引数 ・setterの引数 ※引用 【後悔しないための入門書】Spring解体新書: Sprin …

記事を探す

SpringFramworkの良書

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

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