プログラミング 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の勉強をしようとする方向けにJavaの開発環境を準備する手順をご説明します。   環境構築 Eclipseのダウンロード IDE(統合開発環境)のEclipseをダウンロードしま …

【Java入門】判定処理(if, if else, switch文)の使い方まとめ

概要 判定処理には、if / if-else / switch文があります。 これらはとても基本的な判定処理ですが、基本的な使い方に加えて、ちょっとした構文上のTipsや注意点についても解説していきま …

【Bootstrap】ログイン画面をデザインしよう!

概要 【SpringSecurity】#3~ 独自のログイン画面でシンプルな独自のログイン画面を実装しました。 これに、Bootstrapでデザインを施していきます。 Bootstrapのサンプルを基 …

Git BashでUniCodeに文字化けする時の対処法

大変参考になったサイトのエイリアスです。 git diff や git status での日本語の文字化けを防ぐ (core.page, core.quotepath) 私は自分のブログをリファレンス …

SpringFramworkの良書

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

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