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


関連記事

【SpringBoot入門】#6~ 登録機能の実装

概要 画面から送信されたデータをDBに登録する機能を実装します。 入力データはバリデーションによってチェックされることとします。 サーバサイドは以下のように各層で処理分けされます。 <Contorol …

【SpringBoot入門】#1~ 開発環境を準備しよう(IDE)

想定読者 SpringBootを始めて学ぶ方   IDE(Eclipse) IDEにはEclipse以外にもNetBeansやIntelliJがあります。 好みによりますので使いやすいものを …

【SpringBoot入門】#11~ 削除ダイアログの作成

概要 検索結果から削除機能を呼び出した際に、削除を確認するためのダイアログです。 実装はjQueryで行いますので、mavenへの追加作業等の準備を別途行います。 イメージ jQueryの準備 jQu …

【Java】HashSet、LinkedHashSet、TreeSetの違い

概要 重複しないリストは、「Setに格納することで重複を除外してくれる」というのは多くの記事で紹介されています。 ここでは、Setに格納した後のデータの並び順も考慮したいという要件に対応するために、3 …

【Bootstrap】一覧表示をデザインしよう!

概要 一覧表示をデザインします。 Bootstrapにはすぐに使える便利なクラスが用意されているので、それらを使用して実現します。 【SpringBootチュートリアル】#7~ 検索画面の作成に変更を …

■運営者プロフィール
IT業界10年のエンジニア。
PHP -> VBA -> Javaと渡り歩いてきて、今はJavaをメインにフリーランスエンジニアとして活躍中!

[保有資格]
・Java SE 11 Gold

一度はエンジニアを辞めざるを得なかった私が再びエンジニアとして復活した数奇な物語

SpringFramworkの良書

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

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