2018年09月14日

師匠のJava道場~第13回・インターフェースについて学ぶのじゃっ!!

師匠T:さぁ、いよいよこの講座も最終回じゃ! 覚悟はよいか?

弟子D:はい! とても長い道のりでしたね。

師匠T:うむ。今回はいよいよその総決算。それによって、おぬしの運命も決まる。心するがよい!

弟子D:わかりました! それで今回は?

師匠T:うむ。今回はインターフェースなるものについて説明する。ではいくぞ!

▽ 師匠、インターフェースとはなんぞや? ▽

弟子D:師匠、さっそくですが、インターフェースとはなんぞや?

師匠T:うむ。これは、簡単に言ってしまえば、メインとなるクラスに実装されて、ある機能を付加するもののことじゃ。

弟子D:ふむふむ。

師匠T:このインターフェースは、次の三つに大別されるぞ。

・〇〇〇able系……『~することが可能であること』を表すインターフェース。ただし、Throwableは例外。
・〇〇〇Listener……あるイベントの発生を通知するためのインターフェース
・名詞系……抽象化クラスのようなインターフェース

師匠T:〇〇〇able系は、それを実装することにより、ある機能を使うことが可能になるものじゃ。例えば、runnableであれば、マルチスレッドが『可能』になる、というような感じじゃな。

弟子D:なるほど。次の『〇〇〇Listener』系は?

師匠T:うむ。例えばVBでは、ボタンを押したり、テキストボックスの内容を変更したりすると、イベントが発生するじゃろ? 前者ならClickイベント、後者ならTextChangedイベント、という具合にな。

弟子D:はい。

師匠T:これを実装すると、そのようなイベントがJavaプログラム実行時に発生した場合、それを受け取ることができるのじゃ。もちろん、そのときに実行するコードを書くこともできるぞ。

弟子D:なるほどっ。

師匠T:最後の名詞系については、ここでは省略しておく。知りたくば、Java関係の書籍やサイトを見るがよい。

弟子D:さては、説明するのがめんどく……

師匠T:はぁっ!!(飛び蹴り

▽ 実装する方法と作成する方法なのじゃ! ▽

師匠T:続いては実装する方法じゃが、これは簡単。クラス宣言の最後に、予約語implementsを使って、こう付け加えればいいだけじゃ。

--------------------
class 〇〇〇 implements △△△
--------------------

師匠T:例えば、Sisyoクラスにrunnableインターフェースを実装したければ、このように書く。

--------------------
class Sisyo implements runnable
--------------------

師匠T:そして、作成する方法じゃが、こちらも難しいことはない。classの代わりにinterfaceで宣言すればいいだけじゃ。例えば、DeshiAというインターフェースを作りたければ、こう書けばいいわけだな。

--------------------
interface DeshiA
--------------------

師匠T:このとき、インターフェースが持つメソッドは、抽象クラスの抽象メソッドのように、宣言部だけを書くこと。中身は書くでないぞ。

弟子D:あの師匠。インターフェースを継承することはできないのでしょうか?

師匠T:もちろんできるぞ。その場合は、クラスと同じように、extendsを使えばよい。

弟子D:なるほどっ。

師匠T:さて。実装のついて一つ注意じゃ。インターフェースを実装すると、それに付随するメソッドも自動的に追加されるが、その追加されたメソッドを一つも実装しなかった場合は、そのクラスは抽象クラスにしなければならないので気を付けることじゃ。

弟子D:はいっ。……ところで、抽象クラスってなんでしたっけ?

師匠T:……はぁっ!!(飛び蹴り

弟子D:うわあっ。

師匠T:おぬしの頭は、容量が1KBしかないのか。第10回の講座を読み返してこいっ!

弟子D:うぅ、すいません、師匠……。

▽ インターフェースと抽象クラスの、似ている点、違う点じゃ! ▽

師匠T:さて、このインターフェースと抽象クラスはいくつか、似ている点と違う点がある。ここではそれを説明していくぞ。

弟子D:はい、師匠!

師匠T:まず、インターフェースも抽象クラスも、newでインスタンスを作ることはできない。じゃが、参照型変数を作ることはできる。あらかじめ言っておくが、もし参照型変数のことがわからなければ、過去の記事を読むように。

弟子D:は、はい。して、そのほかには?

師匠T:うむ。インターフェースのメソッドも抽象クラスの抽象メソッドも、作るときはメソッド名だけを決める。つまり、そのメソッド内の処理は書かない、ということじゃな。

弟子D:なるほど。

師匠T:続いて違う点じゃが、一つ目。当然のことじゃが、抽象クラスはクラスじゃが、インターフェースはクラスではない。

弟子D:そういえば、抽象クラスはclassで宣言しますが、インターフェースはinterfaceですものね。

師匠T:うむ。そして二つ目。抽象クラスは、抽象メソッドではないメソッドも持つことはできるが、インターフェースは中身のないメソッドしか持つことはできないのじゃ。

弟子D:ふむふむ。

師匠T:そして最後。抽象クラスは、中身を変更できるフィールド(他の言語で言う変数)を持つことができるが、インターフェースはpublic static finalで宣言されるもの……つまり定数しか持つことはできぬのじゃ。

弟子D:なるほど。

▽ 師匠、インターフェースの利点とはなんぞや ▽

師匠T:では最後じゃ。ここでは、インターフェースの利点について語るとしようぞ。まず一つ目じゃが、インターフェース型の参照型変数では、それに対して、toStringメソッドやequalメソッドなどのObjectクラスで宣言されているメソッドを呼び出すことができる。

弟子D:ふむふむ。

師匠T:そして二つ目。以前言った通り、Javaでは多重継承をすることはできぬが、インターフェースをいくつも実装することはできる。これによって、疑似的に多重継承をすることができるのじゃ。

弟子D:なるほど、それは重要なポイントですね。それで次は?

師匠T:うむ。インターフェースを使って、多態性を実現することができる。共通のメソッドを持つインターフェースを、それぞれのクラスに実装する、という方法じゃな。

java1809-01.jpg

師匠T:この場合、継承関係を気にせずに実装でき、また、遠く離れたクラス同士で多態性を実現することが可能じゃ。

弟子D:なるほど、よくわかりました!

師匠T:うむ。弟子よ、ここまで13回、よく頑張ったのう。これはそのほうびじゃ。受け取るがよい。

弟子D:はいっ! あぁ、ついに俺も弟子を卒業……あれ?

『弟子D殿。貴殿を弟子10級から弟子9級に昇格する』

師匠T:ふっふっふっ。

師匠T:さて、ここまでJavaについてレクチャーしてきたが、Javaをマスターする道は長く、また一つではない。精進が必要じゃぞ。ではさらばぢゃ!



※次の更新は、9月17日・『師匠TのチャレンジARSゲーム!』の予定です。お楽しみに!
posted by 裏編 at 08:08| 師匠のJava道場 | 更新情報をチェックする