5これまで見てきたように、インタフェースは抽象クラスに似ています。実は、インタフェースはクラスではありません。インタフェースはクラスじゃないんです。インタフェースはクラスじゃないんです!インタフェースはクラスじゃない!しつこいですか?でももう一度言います。インタフェースはクラスじゃありません!インタフェースはクラスとはまったくの別物なのです。文法的に似ていることから、インタフェースはクラスっぽいと思われるかもしれませんが、実はまったく違うものなのです。違うというのでしょうか。インタフェースはクラスにくっつけるものまず、インタフェースは「クラスの木」の中に含まれません。「クラスの木」とは何かというと、クラスの継承関係を表した図のことです。クラスは、Objectクラスを「一番上のスーパークラス」として、まるで木のようにサブクラスを作っていきます。クラスの「木」まず、一番上にObjectクラスがあります。Objectクラスってなに?」で説明したように、すべてのクラスはこのクラスのサブクラスになります。そのObjectクラスから、枝葉のようにサブクラスが作られます。APIのクラスはもちろん、自分で新しく作ったクラスも必ずこの木の一部となります。クラスはすべてこの木の中に含まれるわけです。ところが、インタフェースはこの木に含まれません。インタフェースはクラスではないので、Objectクラスのサブクラスにはなりません。そのためクラスの木の中にも含まれません。クラスの木に関わりはします。関わるかというと、クラスにくっつきます。クラスの木とインタフェースインタフェースはそれぞれのクラスにくっつきます。木の構造とは関係なく、クラスは個別にインタフェースを実装します。継承と同時にインタフェースをくっつけるわけです。StringクラスはCharSequence、Comparable、Serializableという3つのインタフェースがくっついています。HashMapクラスはCloneable、Map、Serializableという3つのインタフェースがくっついています。実際、APIリファレンスを見てみると、クラスは「木」としてスーパークラス・サブクラスの関係が分かるよう書かれているのに、インタフェースは単に「実装した」とだけしか書かれていません。APIリファレンスのクラスとインタフェースHashMapクラスは「Objectクラス→AbstractMapクラス→HashMapクラス」と、木の上から下へ順に書かれています。Serializable」と書かれているだけです。これは、クラスの木の構造とは関係なく、単に「このインタフェースを実装してますよ」ということが分かればいいからです。このように、インタフェースはクラスの木の継承関係とはまったく関係なく、クラスひとつひとつに個別にくっついているわけです。オブジェクト指向とJavaこのページは、Java言語を用いたオブジェクト指向プログラミングのチュートリアル解説を行う「Javaのオブジェクト指向入門」の一ページです。詳しい説明は「Javaのオブジェクト指向入門」目次をご覧ください。