4. インターフェース (必ず守るべき約束)
規格にぴったり合うクラスだけが作られるように強制的に約束を結んでみましょう。
中身は埋めずに「このクラスは必ずこういう機能がなきゃダメ!」とガワだけ約束したい時は規定しようを使います。
そしてクラスを作る時に【インターフェース】に 従うキーワードを使えば、この約束を無条件に守らないと実行されません!もし継承と一緒に使いたいなら【親】を もとにして 【インターフェース】に 従うの形で使うこともできるんですよ。
【飛べるもの】を規定しよう:
〈飛ぶ〉がなければならない()
【音を出すもの】を規定しよう:
〈音を出す〉がなければならない()
(参考)二つの約束をすべて守る鳥を作ってみましょうか?
【飛べるもの】と【音を出すもの】に従う【鳥】を設計しよう:
〈飛ぶ〉を作ろう():
「パタパタと空っぽを飛びます!」を出力しよう
〈音を出す〉を作ろう():
「チュンチュン!」を出力しよう
『スズメ』を【鳥】の新しい【鳥】()にしよう
『スズメ』の〈音を出す〉()を実行しよう
『スズメ』の〈飛ぶ〉()を実行しよう
もしインターフェースに書かれた機能を一つでも忘れると、プログラムが始まる前にエラーを吐いて厳しく立ちはだかるんですよ!複数のインターフェースを同時にとで結んで従うこともできます。
約束を破るとどうなるでしょうか?
インターフェースに従うと言っておいて機能を忘れるとどうなるか、直接エラーを確認してみましょうか?
【動くもの】を規定しよう:
〈走る〉がなければならない()
〈止まる〉がなければならない()
(参考)走ることだけ作って止まることをうっかり忘れました!
【動くもの】に従う【壊れたロボット】を設計しよう:
〈走る〉を作ろう():
「ロボットが走っていきます!」を出力しよう
『ロボット』を【壊れたロボット】の新しい【壊れたロボット】()にしよう
このコードを実行してみると“InterfaceImplementationError: クラス ‘壊れたロボット’ はインターフェース ‘動くもの’ の ‘止まる’ メソッドを実装しなければなりません。”というエラーが出ます。このようにインターフェースを活用すれば、うっかり必須機能を忘れることを完璧に防ぐことができるんですよ!