「こんにちは、アミーゴ! もう一度私です。インターフェースについて別の観点から説明したいと思います。ほら、ほとんどの場合、クラスは特定のオブジェクトのモデルです。対照的に、インターフェースはオブジェクトの能力やオブジェクトのモデルに似ています。オブジェクト自体ではなく、役割です。」

たとえば、車、自転車、オートバイ、車輪などは、クラスとオブジェクトとして表すのが最適です。しかし、「移動できる」、「人を運ぶことができる」、「駐車できる」などの能力は、インターフェースとしてより適切に表現されます。この例を確認してください。

Javaコード 説明
interface Moveable
{
void move(String newAddress);
}
移動能力に相当します。
interface Driveable
{
void drive(Driver driver);
}
移動能力に相当します。
interface Transport
{
void addStuff(Object stuff);
Object removeStuff();
}
荷物を運ぶ能力に対応します。
class Wheel implements Moveable
{
...
}
«wheel» クラス。移動能力がある。
class Car implements Moveable, Drivable, Transport
{
...
}
「車」クラス。移動したり、人が運転したり、荷物を運んだりする能力があります。
class Skateboard implements Moveable, Driveable
{
...
}
「スケートボード」のクラスです。人によって移動し、制御される能力を持っています。

インターフェイスはプログラマの作業を大幅に簡素化します。プログラムには、数千のオブジェクト、数百のクラス、およびわずか数十のインターフェイス (ロール) が含まれることがよくあります。ロールの数は少ないですが、さまざまな方法 (クラス) で組み合わせることができます。

重要なのは、他のすべてのクラスとの相互作用を定義するコードを記述する必要がないということです。あなたがしなければならないのは、ロール (インターフェイス) と対話することだけです。

あなたがロボットビルダーであると想像してください。数十の従属ロボットがあり、それぞれが複数のスキルを持つことができます。急いで壁の建設を完了する必要があるとします。「建設」能力を持つすべてのロボットを取り出して、壁を建設するように指示するだけです。どのロボットがそれを行うかはあまり気にしません。それをロボットじょうろにしましょう。構築方法がわかっている場合は、構築させてください。

コードでは次のようになります。

Javaコード 説明
static interface WallBuilder
{
void buildWall();
}
「壁を築く」能力。「壁を築く」というコマンドを理解しています(適切な方法を持っています)。
static class WorkerRobot implements WallBuilder
{
void buildWall()
 {
…
 }
}
static class GuardRobot implements WallBuilder
{
void buildWall()
 {
…
 }
}
static class WateringCan
{
…
}
この能力/スキルを持つロボット。

じょうろで壁を構築することはできません (WallBuilder インターフェイスは実装されていません)。

public static void main(String[] args)
{
 //add all robots to a list
 ArrayList robots = new ArrayList();
 robots.add(new WorkerRobot());
 robots.add(new GuardRobot());
 robots.add(new WateringCan());

 //build a wall if you can
 for (Object robot: robots)
 {
  if (robot instanceof WallBuilder)
  {
   WallBuilder builder = (WallBuilder) robot;
   builder.buildWall();
   }
  }
 }
}
壁を築くように命令するにはどうすればよいでしょうか?

「驚くほど興味深いですね。インターフェースがこれほど興味深いトピックになるとは夢にも思いませんでした。」

「それから、さらにいくつかのことです。ポリモーフィズムと合わせて、それはまったく驚くべきものです。」