
今回は…
というテーマでお送りします。

今回も、プログラミングを楽しみます。
今回も、よろしくお願いします。

その集大成ですね。今回も、頑張ります!
【1】 ポリモフィズムの実現


ポリモフィズム(多態性)とは
オブジェクトが異なる振る舞いをする部分を
同一のメソッド呼出しで、扱えること です。
同一のメソッド呼出しで扱えること。
複数のオブジェクトに
異なる振る舞いをする メソッドがある時に…
1つのメソッド呼出しで、扱いたい場合です。
この時に、まとめの箱を用意して…
…と、1つのメソッド呼び出しで 表現できると
スッキリする というお話をしました。

この時の
Javaでの実現方法として、前回は…
の解説をしました。
そして、今回は
での、実現方法を見ていきましょう。


振り返っておきましょう。
抽象メソッドは、ポリモフィズムで
共通の呼び出しを実現するため…
シグネチャ(メソッド名・引数パターン)と
戻り値 だけを定義するメソッド です。
そして、抽象メソッドには
処理内容の記述は しません。
抽象クラスの中では
abstract修飾子をつけて表します。
シグネチャ(メソッド名・引数パターン)と戻り値
だけを定義するメソッド。
✅ 処理内容の記述はない。
✅ 抽象クラスの中では abstract修飾子をつけて表す。
さきほどの「まとめの箱」で
定義するメソッドです。
でしたね…。
この前提を元に、今回のインタフェースを
見ていきましょう。


【2】 インタフェース

それでは、インタフェースの
イメージから 見ていきましょう。
この、インターフェースは…
クラスが利用しやすいように、表面に装着しておく…
のようなものです。

そのタッチパネルには、クラスを利用するための
操作ボタンが付いています。

操作ボタンは「印刷する」「表示する」「挨拶する」など
端的に表現される場合が多いもの。
そして、このボタンを押すと、装着されている実体
によって、異なった振る舞いをします。
クラス独自の振る舞いですね。

この、同じ種類のタッチパネルは、複数のクラスに
装着しておくことができます。
ですので、そのタッチパネルを装着したクラスは…
準備しておく必要があります。


Javaでの実現方法を見ていきましょう。
インタフェースは「境界面」「接点」「仲介する」
という 意味があります。
そして Javaでのインタフェースは
「仲介する」役割を持っています。

先程の タッチパネルを装着することを Javaでは
と言います。

そして、タッチパネルについていた
操作ボタンは、Javaでは…
です。

インタフェースには
抽象メソッドが定義されている ことになりますね。
そして、インタフェースを実装したクラスは…
そのインタフェースで定義された 抽象メソッドを
オーバーライド しておく必要があります。

インタフェースはクラスに対して…
処理を作っておいてください。」
と言います。

一方で インタフェースは、クラスを利用する側に対しては
抽象メソッド(呼び出し方の形)を示して…
クラス毎に、適切な処理をしますから。」
と言うわけですね。

このように、インタフェースは…
クラス側と利用する側の
イメージになるのです。

また、もう1つインタフェースの特徴を
お伝えしておきますね。それは…
複数のインタフェースを実装できる。
ということです。

以前に、クラスの継承のところで お話しましたが…
あるクラスからみて
スーパークラスは、1つにする必要がありました。
これを単一継承といいましたね。

これに対して インタフェースは、複数の実装が可能です。
といいます。

これも、インタフェースの持つ 強力な特徴です。
これは、クラスを扱う場合を考えると…
複数の切り口で 考えられる。
という事になるのです。


クラス側と利用する側の仲介をする役割なんですね。
そして、実際の処理(振る舞い)は実装するクラスで定義するから
ポリモフィズムが実現するという事なんですね。
じわじわ、解ってきましたよ!

面白いですね。
着目できる側面が複数あるので
小さく分割して考えやすいと言えますね。
面白くなってきましたね。ワクワクです。
引き続き、全集中で見ていきます。
【3】 Javaでの表現


① 定義
アクセス修飾子 interface インタフェース名 {
戻り値の型 抽象メソッド名(型 引数,…);
}
public interface Shippable {
void ship();
}
インタフェースは
キーワード interface を使って定義します。
で、インタフェースのブロックを記述します。

インタフェース名は Javaの慣習で
アッパーキャメルケースで記述します。
先頭が大文字で、以降は
単語の区切りの先頭が大文字です。
インタフェースに記述できるのは
❷定数
❸defaultメソッド(Java8以降)
❹staticメソッド(Java8以降)
となりますが、今回は ポリモフィズム実現のための
抽象メソッドを 見ていきましょう。
抽象メソッドは
を書いて セミコロンで終了します。
メソッドの処理ブロックは、記述できません。

また、抽象クラスの中で記述する場合には
abstract修飾子 をつけて記述していましたが…
つけなくても 抽象メソッドの意味になります。

そして、抽象メソッドの アクセス修飾子は
記述しない場合もpublic と扱われます。
②実装
アクセス修飾子 class クラス名
implements インタフェース名1, インタフェース名2,… {
:
(抽象メソッドのオーバーライド必須)
:
}
public class LogisticEmployee
implements ExtPrintable, Shippable {
:
@Override
public void print() {
(処理ブロック記述)
}
:
}
インタフェースをクラスに実装する時には
このようにクラス定義の後に
を使用してその後に
インタフェース名を記述します。

複数のインタフェースを 実装する場合には
カンマで区切って 記述します。

そして、インタフェースを実装したクラスは
抽象メソッドの オーバーライドが必須となります。

③利用
(インタフェース型へのアップキャスト)
変数.メソッド名() → 実装クラスのメソッド実行
(ポリモフィズム)
インタフェースを実装したクラスを
インスタンス化して 利用する時に…
この インタフェース型の変数や配列に
代入して扱う事ができます。

そして、インタフェースで定義された
抽象メソッドを 呼び出すと…
そのインタフェースを 実装したクラスのメソッドが
実行されるという ポリモフィズム が実現されるのです。

この場合に
そのインタフェースを実装した 複数のクラスを…
インタフェースの枠組みに着目して
扱うことができる という利点があるのです。
【4】 クラス図

クラス図での、インターフェース 表現を
見ておきまよう。
クラスと同じように記述しますが…
インターフェース名の上に
と記述します。

ここで、一般に、この <<(小なり2つ)>>(大なり2つ)
の形式で 記述する方法を
といいます。
また クラスとインタフェースの関係は
破線(点線)で表して
インタフェース側に△印を記述します。

関係性は「実現」といいます。
実現する。
という意味です。

【まとめ】

インタフェースを使う方法がある。
✅ 抽象メソッドを定義して
呼び出し方をを規定する。
接点で、仲介役 となる。
✅ クラス側には、メソッドの
オーバーライド(実装)を依頼。
✅ 利用する側には、メソッドの
使い方を案内。
✅ クラスに実装するには
キーワード implements を使用。
✅ インタフェースを実装したクラスは
抽象メソッドのオーバーライドが必須。
インタフェース名の上に
<<interface>> と記述する。
✅ クラスとインタフェースの関係は
破線で表して、インタフェース側に
△印を記述する。
✅ 関係性は「実現」という。
今回も、ご覧いただき、ありがとうございます。