Javaのinterfaceをimplementsしたとき「is-a関係」と言えるのか?

こんにちは。ゆうせいです。

Javaのinterfaceをimplementsしたとき「is-a関係」と言えるのか?

これはJavaプログラミングの基本的な疑問ですが、とても奥が深いテーマです。この記事では、「interfaceをimplementsすることはis-a関係と言えるのか?」について、初心者にもわかりやすく丁寧に解説していきます!


結論:一般的には「is-a関係」と言える

Javaでクラスがあるインターフェースをimplementsした場合、そのクラスとインターフェースとの間には「is-a(〜である)」関係が成り立つと考えられています。

たとえば、以下のようなコードがあったとします:

interface Animal {
    void eat();
}

class Dog implements Animal {
    public void eat() {
        System.out.println("Dog is eating");
    }
}

このとき、

  • DogAnimalである(Dog is a Animal)と言えます。

つまり、「DogはAnimalの一種」として扱えるため、is-a関係です。


interfaceと継承の違いと共通点

Javaにおける継承(extends)と実装(implements)の違いを一度整理しましょう。

項目extends(クラス継承)implements(インターフェース実装)
関係性is-a関係is-a関係(ただし「契約」とも言える)
多重継承不可(1つのクラスのみ)可(複数のインターフェース)
メンバーの継承実装を含むメソッドの定義だけ(実装はない)

ポイントは「契約」

インターフェースは「このクラスはこういう振る舞いをします」と約束するためのものです。この約束(契約)を守るために、実装クラスはすべてのメソッドを定義しなければなりません。

そのため、インターフェースを実装しているということは:

  • 「そのインターフェースの型として振る舞える」
  • つまり、インターフェースの型の変数に代入できる

という性質を持ちます。


例で考える:ListとArrayListの関係

List<String> names = new ArrayList<>();

このコードは、

  • ArrayListListの一種である(ArrayList is a List
  • だからList型の変数に代入できる

という意味です。

このように、interfaceをimplementsすることは、「型の多態性(ポリモーフィズム)」を実現する上で非常に重要です。


is-a関係の注意点

ただし、「is-a関係」と簡単に言っても、実際には使い方によっては誤解を生むことがあります。

例:Comparableインターフェース

class Student implements Comparable<Student> {
    public int compareTo(Student other) {
        return this.score - other.score;
    }
}

このとき、「Student is a Comparable」ですが、

  • Studentは「比較できるオブジェクト」として扱える
  • でも、「StudentはComparableのような存在」ではない
  • あくまで「その振る舞いを持っている」という意味

というふうに、純粋な「〜の一種」ではなく、「〜のように振る舞える」という意味合いも含まれます。


「is-a」と「has-a」の違いも押さえよう

関係説明
is-a継承または実装Dog is a Animal
has-aメンバー変数に持つDog has a Tail

この違いを理解することで、設計力がグッと上がります。


まとめ:interfaceのimplementsは「is-a関係」だが、文脈に注意!

  • implementsは基本的に「is-a関係」と捉えられる
  • 実際にはそのインターフェースの型として扱えるという意味
  • 契約(インターフェース)を守ることでポリモーフィズムが実現
  • ただし「何でもis-a」と捉えると誤解の元になることも!

今後の学習の指針

  • 「継承」と「インターフェース」の使い分けをしっかり理解しよう
  • abstract classinterfaceの違いも学ぼう
  • 実際にJavaの標準ライブラリのクラス(たとえばArrayList, HashMapなど)がどう使われているかを見てみると理解が深まります!

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。